最新記事

systemdを使用したMTPデバイスのマウント
linux
systemd
mount
mtp

systemdを使用したMTPデバイスのマウント

Linux:確立されたシンステーション6.2プロジェクト(systemdから) 仕事:シンクライアントに接続すると、MTPデバイス(Android携帯電話など)を自動的にマウントします。 質問:デバイスの接続中にディストリビューションの読み込み中にエラーが発生したか、デバイスが正しくインストールされていません。 インストール中に使用されるソフトウェア: シンプルなmtpfs、Androidファイル転送 - Linux、Android-udev-ルール 最初の試み ルールに51-android.rules、携帯電話をシンクライアントに接続する場合に備えてプログラム実行を追加しました。 ... # Skip other vendor tests LABEL="android_usb_rule_match" RUN+="/etc/udev/scripts/mtp.sh" ... 私のスクリプトは、接続する/etc/udev/scripts/mtp.shとデバイスのインストールを実行します。 #!/bin/sh . /etc/thinstation.env . $TS_GLOBAL if [[ $ACTION == "add" ]]; then echo "********************* START MOUNT *******************" | systemd-cat -p info -t "mtp" /bin/aft-mtp-mount /phone grep -oe "/phone" /proc/mounts | systemd-cat -p err -t "mtp" ls "/phone/Внутренний общий накопитель" | systemd-cat -p err -t "mtp" echo "********************** END MOUNT ********************" | systemd-cat -p info -t "mtp" elif [[ $ACTION == "remove" ]]; then echo "******************** START UNMOUNT ******************" | systemd-cat -p info -t "mtp" umount /phone echo "********************* END UNMOUNT *******************" | systemd-cat -p info -t "mtp" fi PS BusyBoxはTSにログを書き込まないecho ...ため、ロギング構造を使用しています。logger 私のデバイスがマウントされていない理由を確認するために、ロギングスクリプトを使用しました。あるいは、むしろインストールしてから時間が経つにつれて落ちたが、システムにはインストールされたデバイスとは見えなかった。インターネットでグーグルして見つけた情報systemdはデフォルトで別々の「マウントネームスペース」を使用してsystemd-udevd.serviceを実行します。 2回目の試み ルールを書き直しました51-android.rules次のように: ... # Skip other vendor tests LABEL="android_usb_rule_match" ACTION=="add", PROGRAM="/bin/aft-mtp-mount -p [email protected] $env{ID_MODEL}_$env{ID_VENDOR}", ENV{SYSTEMD_WANTS}+="%c" ... そして以下を入力してください:/etc/systemd/system/[email protected] [Service] Type=oneshot ExecStart=/etc/udev/scripts/mtp.sh /etc/udev/scripts/mtp.shそのため、イベントにのみ応答するようにスクリプトを書き直しましたadd。 #!/bin/sh . /etc/thinstation.env . $TS_GLOBAL /bin/aft-mtp-mount /phone テスト中にスクリプトを使用せずに直接ディレクトリをアンマウントしたと仮定するのは妥当です。その結果、電話は常に最初の接続に失敗します。数分の接続制限に何らかのタイムアウトがあるように感じます。結局、私は問題が何であるかを知りませんでした。 3回目の試み この問題を解決するための全体的なプロセスは次のようになりました。stackoverflowですでに利用可能。この投稿でソリューションを再現しようとしています。 修正済み51-android.rulesスクリプトは次のとおりです。 ... # Skip other vendor tests LABEL="android_usb_rule_match" ACTION=="add", RUN+="/bin/systemctl start mtp@$env{ID_VENDOR}_$env{ID_MODEL}_$env{ID_REVISION}.service" ACTION=="remove", RUN+="/bin/systemctl stop mtp@$env{ID_VENDOR}_$env{ID_MODEL}_$env{ID_REVISION}.service" ... そして以下を入力してください:/etc/systemd/system/[email protected] [Service] Type=oneshot RemainAfterExit=true ExecStart=/etc/udev/scripts/mtp.sh add %I ExecStop=/etc/udev/scripts/mtp.sh remove %I そして実行スクリプトをマウントします/etc/udev/scripts/mtp.sh。 #! /bin/sh . /etc/thinstation.env . $TS_GLOBAL ACTION=$1 DEVICE_NAME=$2 MOUNT=/bin/aft-mtp-mount CURRENT_DEVICE_MOUNT_PATH=$BASE_MOUNT_PATH/$USB_MOUNT_DIR/$DEVICE_NAME _logger() { echo "$2" | systemd-cat -p $1 -t "mtp" } _mounted() { if [ -n "$(grep -oe "$1" /proc/mounts)" ]; then return 0 else return 1 fi } _mount() { _logger info "mount $DEVICE_NAME" if [ -d $CURRENT_DEVICE_MOUNT_PATH ] && _mounted $CURRENT_DEVICE_MOUNT_PATH; then _logger warning "$DEVICE_NAME already mounted" exit 1 fi if [ ! -d $CURRENT_DEVICE_MOUNT_PATH ]; then mkdir $CURRENT_DEVICE_MOUNT_PATH if is_enabled "$USB_STORAGE_SYNC" && [ ! -n "$(echo $USB_MOUNT_OPTIONS | grep -e sync)" ]; then USB_MOUNT_OPTIONS=$USB_MOUNT_OPTIONS,sync fi $MOUNT -o $USB_MOUNT_OPTIONS $CURRENT_DEVICE_MOUNT_PATH if _mounted $CURRENT_DEVICE_MOUNT_PATH && [ "$(ls -A $CURRENT_DEVICE_MOUNT_PATH)" ]; then _logger info "mounted $DEVICE_NAME in $CURRENT_DEVICE_MOUNT_PATH" else _logger warning "$DEVICE_NAME failed to mount" _umount exit 2 fi else _logger warning "$CURRENT_DEVICE_MOUNT_PATH already exists" exit 3 fi } _umount() { _logger info "unmount $DEVICE_NAME" if [[ -d $CURRENT_DEVICE_MOUNT_PATH ]]; then while _mounted $CURRENT_DEVICE_MOUNT_PATH; do umount $CURRENT_DEVICE_MOUNT_PATH done _logger info "unmounted $DEVICE_NAME in $CURRENT_DEVICE_MOUNT_PATH" rm -r $CURRENT_DEVICE_MOUNT_PATH else _logger warning "$DEVICE_NAME was not mounted" fi } if [ $ACTION == "add" ]; then _mount elif [ $ACTION == "remove" ]; then _umount fi exit 0 今、すべてが期待どおりに動作します!しかし、ニュアンスがあります。 起動中に電話機が最初にシンクライアントに接続された場合、システムは開かれません。起動中にダイヤルアップが切断されると、シンクライアントのロードに問題はなく、接続するとインストールが正常に機能します。 シンクライアントのダウンロード中にsystemd-udevd読み込もうとしたようです。51-android.rulesルールを適用し、モバイルインストールスクリプトを呼び出すため、追加のロードの問題が発生します。 ダウンロードデータを抽出してみたところ、次のようになります。 システム化されたサービスロードスケジュール カーネルログ わかりません。実装がすべて間違っているか、問題がある可能性があります。さまざまなオプションを試しているようです。デバイスのマウントを試みることができますが、systemd-mountMTPプロトコルを介したマウントはサポートされていません。それとも別の方法で達成できますか?このトピックに関するその他の情報が見つかりませんでした。行き詰まった路地に至ったので、ご存知の方にお願いします。アーチ法廷。テーマを作ってみましたGitHubしかし、現在まで何の進展もありません。

Admin

Storage = autoの場合、systemd-journaldが
linux
systemd
systemd-journald

Storage = autoの場合、systemd-journaldが "/var/log/journal/machine_id"ディレクトリを作成する理由

私はsystemd-journaldのコードを調べて、次のことを見つけました(でsystem_journal_open()): if (!s->system_journal && IN_SET(s->storage, STORAGE_PERSISTENT, STORAGE_AUTO) && (flush_requested || flushed_flag_is_set())) { /* If in auto mode: first try to create the machine * path, but not the prefix. * * If in persistent mode: create /var/log/journal and * the machine path */ if (s->storage == STORAGE_PERSISTENT) (void) mkdir_p("/var/log/journal/", 0755); (void) mkdir(s->system_storage.path, 0755); fn = strjoina(s->system_storage.path, "/system.journal"); ここでは、以前の関数呼び出しでに設定されましたsystem_storage.path。strjoin("/var/log/journal/", SERVER_MACHINE_ID(s)); 私が理解した/var/log/journalのはリポジトリですpersistent。しかし、どちらの場合(persistentまたはauto)も/var/log/journal/machine_idディレクトリ((void) mkdir(s->system_storage.path, 0755);)を作成するのはなぜですか? auto事前に生成された場合はログが保持され/var/log/journal、それ以外の場合はログが記録されます/run/log/journal。ディレクトリをauto作成しないでください。/var/log/journal/machine_id また、コメントを読んだ後に/var/log/journal/machine_idプレフィックスを作成せずにどのように作成できますか?私は/var/log/journalそれがプレフィックスだと仮定しています。

Admin

Systemd-nspawnとgpgpu
systemd
gpu
opencl

Systemd-nspawnとgpgpu

nspawnコンテナ内でGPUコンピューティングアプリケーションを実行しようとしています。コンテナを次のように設定しました。 /etc/systemd/nspawn/ubuntuintel.nspawn: argon# cat ubuntuintel.nspawn [Exec] Capability=CAP_SYS_ADMIN [Files] Bind=/dev/dri /etc/systemd/system.control/[email protected]/50-DeviceAllow.conf: # This is a drop-in unit file extension, created via "systemctl set-property" # or an equivalent operation. Do not edit. [Service] DeviceAllow= DeviceAllow=/dev/net/tun rwm DeviceAllow=char-pts rw DeviceAllow=/dev/loop-control rw DeviceAllow=block-loop rw DeviceAllow=block-blkext rw DeviceAllow=/dev/mapper/control rw DeviceAllow=block-device-mapper rw DeviceAllow=/dev/dri rwm 次に、次のようにコンテナを実行します。systemctl start [email protected] /dev/driディレクトリはコンテナにありますが、アプリケーションを実行すると次のことが起こります。 openat(AT_FDCWD, "/dev/dri/renderD128", O_RDWR) = -1 EPERM (Operation not permitted) コンテナにGPUを使用させる正しい方法は何ですか?単にqemu + pciパススルーを使用することも検討しましたが、はるかに重いです。

Admin

外部表示なしのシステムサービス - プロセスで例外が発生して終了します。
ssh
systemd
x11

外部表示なしのシステムサービス - プロセスで例外が発生して終了します。

アプリケーションをシステムサービスとして実行しようとしています。サービスファイルの例は次のとおりです。 [Unit] Description = Custom APP Wants = network.target After = syslog.target network-online.target graphical.target StartLimitIntervalSec = 0 [Service] User = Type = simple Environment = WorkingDirectory = ExecStart = Restart = always RestartSec = 60 KillMode = control-group [Install] WantedBy = graphical.target SSH経由でサービスを実行します。オペレーティングシステムはUbuntu 18.04です。外部モニタがデバイスに接続されており、すべての場合にGUIを介してシステムに一度ログインしてからデバイスでsshを実行すると、サービスとプロセスは期待どおりに機能します。 ただし、デバイスを再起動して外部モニタを削除してSSHを介してのみログインすると(たとえば、GUIベースのログインなし)、これが発生します。 コマンドラインから簡単なプロセスでアプリケーションを実行すると、期待どおりに機能します。 アプリケーションをシステムサービスとして実行しようとすると、例外が発生した後に終了します。 GUIを介して一度だけログインし、デバイスを再起動しないと、外部モニタを削除してもサービスは正常に動作します。 なぜこれが起こるのかわかりません。 編集する スローされた例外は - 有効な例外なしでTerminateが呼び出されることです。 C++ gstreamer に基づくストリーミングアプリケーションです。

Admin

systemd: After= ディレクティブのオーバーライドを許可する
systemd
services
daemon

systemd: After= ディレクティブのオーバーライドを許可する

サービスInitとサービスデーモンの2つのサービスがあります。 Service Initは通常、サービスデーモンの構成ファイルを設定するために使用されるシステム設定を実行します(例echo "MY_ENV_VAR=true" >> /etc/daemon/daemon.config:)。 したがって、After=Init.servicedaemon.serviceファイルでInitを使用した後、サービスデーモンを起動します。 ただし、一部のユーザーは、Initサービスでデーモンサービスを開始または再起動しようとしています。 「After」ディレクティブをオーバーライドしながら同時に使用する方法はありますか? つまり、After=を使用したいのですが、ソフト依存関係にしたいのです。

Admin

SystemdのないArtix Linuxは、親Arch Linuxのパッケージをインストールできますか?
arch-linux
systemd
compatibility
openrc

SystemdのないArtix Linuxは、親Arch Linuxのパッケージをインストールできますか?

Systemd-freeをインストールしたいアティカスLinuxしかし、注意してくださいリリース時計多くのパッケージを見逃した。 Archベースのディストリビューションとして、Archリポジトリから直接パッケージをインストールできますか?どちらも異なる2つの初期化システム(OpenRCとSystemd)を使用しているという事実が問題になる可能性がありますか?

Admin

systemdデーモンを介して相対パスでdotnetコア実行可能ファイルを起動します。
systemd
daemon
.net
asp.net

systemdデーモンを介して相対パスでdotnetコア実行可能ファイルを起動します。

dotnet core私はLinux ArmシステムでWebアプリケーションを開発して公開しました。この目的のために、次のコマンドが開始されました。 dotnet publish --runtime linux-arm -p:PublishSingleFile=true 結果は次のディレクトリを提供します。 Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 10/03/2020 8:56 wwwroot -a---- 09/03/2020 10:54 162 appsettings.Development.json -a---- 09/03/2020 10:54 192 appsettings.json -a---- 10/03/2020 8:56 108097487 coremonitor -a---- 09/03/2020 12:59 7248 coremonitor.pdb -a---- 10/03/2020 8:56 474 web.config coremonitor実行ファイルはどこにありますか?このデータはサーバーに送信され、パスに保存されます/root/datalogger/linux-arm/。その後、systemdデーモンを作成し始めました。 [Unit] Description=Data Logger Monitor Daemon [Service] ExecStart=./coremonitor WorkingDirectory=/root/dataloggermonitor/linux-arm User=dotnetuser Group=dotnetuser Restart=on-failure SyslogIdentifier=DataLoggerMonitor-Service PrivateTmp=true [Install] WantedBy=multi-user.target 再起動後、次のsystemdログ(systemctl status dataloggermonitor)が表示されます。 ● dataloggermonitor.service - Data Logger Monitor Daemon Loaded: error (Reason: Invalid argument) Active: inactive (dead)

Admin

Systemdを使用してEC2 CentOSでAirflow Webサーバーを実行する:権限が拒否されました。
linux
systemd

Systemdを使用してEC2 CentOSでAirflow Webサーバーを実行する:権限が拒否されました。

私はそれを使用しています空気の流れEC2 CentOSからシステムエアフロープロセス(ネットワークサーバー、ワーカースレッド、スケジューラなど)を起動するために使用されるデーモンを管理します。私が走るときsudo systemctl start airflow-webserver : ec2-user : TTY=pts/0 ; PWD=/ ; USER=root ; COMMAND=/bin/systemctl enable airflow-webserver Oct 30 01:27:37 ip-171-32-6-92.us-east-2.compute.internal sudo[11680]: ec2-user : TTY=pts/0 ; PWD=/ ; USER=root ; COMMAND=/bin/systemctl start airflow-webserver Oct 30 01:27:37 ip-171-32-6-92.us-east-2.compute.internal systemd[11684]: Failed at step EXEC spawning /home/ec2-user/.local/bin/airflow: Permission denied Oct 30 01:27:37 ip-171-32-6-92.us-east-2.compute.internal systemd[1]: airflow-webserver.service: main process exited, code=exited, status=203/EXEC Oct 30 01:27:37 ip-171-32-6-92.us-east-2.compute.internal systemd[1]: Unit airflow-webserver.service entered failed state. Oct 30 01:27:37 ip-171-32-6-92.us-east-2.compute.internal systemd[1]: airflow-webserver.service failed airflow webserver.service [Unit] Description=Airflow webserver daemon After=network.target postgresql.service mysql.service redis.service rabbitmq-server.service Wants=postgresql.service mysql.service redis.service rabbitmq-server.service [Service] EnvironmentFile=/etc/sysconfig/airflow User=airflow Group=airflow Type=simple ExecStart=/home/ec2-user/.local/bin/airflow webserver --pid /run/airflow/webserver.pid RestartSec=5s PrivateTmp=true [Install] WantedBy=multi-user.target Airflowグループとユーザーが存在します。 $ less /etc/group # airflow:x:1001:ec2-user $less etc/psswd # ec2-user:x:1000:1000:EC2 Default User:/home/ec2-user:/bin/bash # tss:x:59:59:Account used by the trousers package to sandbox the tcsd # daemon:/dev/null:/sbin/nologin # airflow:x:1001:1001::/home/airflow:/bin/bash これ役に立ちません。

Admin

Ryzen 3000 CPUでLinuxを起動するときに発生する具体的な問題は何ですか?
linux
systemd
boot
cpu
amd

Ryzen 3000 CPUでLinuxを起動するときに発生する具体的な問題は何ですか?

私が理解しているように、AMD Ryzen 3000 CPUプラットフォームはLinuxを起動するときに特に次の分野で問題があります(マザーボードのBIOSバージョンによって異なります)systemd。確かに。 私はAMDがBIOSアップデートを介して修正をリリースしていることを知っていますが、AMDの従業員以外に問題が何であるか、何が起こっているのか、最終的な修正が何であるかを知っている人がいるのだろうか。 誰かが私に正確に何が問題なのかを説明できますか? AMD以外の人が知っていますか? 修正する: どうやってこれが起こったのか知りたいです。詳細、私は簡単な答えを探していません。 誰でも詳細な説明を提供していただきありがとうございます。

Admin

起動時に自動的に開始されるシステムサービスを無効にする方法は?
systemd
boot
reboot

起動時に自動的に開始されるシステムサービスを無効にする方法は?

再起動後に特定のサービスを開始しないようにsystemdに要求する方法がわかりません。サービスを無効にしようとしましたが、無効にした後は、サービスのユニットファイルが/ etc / systemd / systemにないため、起動できません。 WantedByも消してみました。私の設定ファイル: [Service] Type=simple Restart=no WorkingDirectory=/home/sentinel/arbitrage ExecStart=/home/sentinel/arbitrage/venv/bin/python -m src.settings_bot.main User=sentinel Group=sentinel Environment=PYTHONUNBUFFERED=1 Environment=DEV= StandardOutput=append:/home/sentinel/arbitrage/settings-bot-log.txt StandardError=append:/home/sentinel/arbitrage/settings-bot-log.txt [Install] WantedBy=

Admin