最新記事

Dバス監視はコマンドラインで機能しますが、システムサービスでは機能しません。
systemd
d-bus

Dバス監視はコマンドラインで機能しますが、システムサービスでは機能しません。

ModemManagerを使用してSMSメッセージを読み取るbashスクリプトを作成しましたmmcli。ほとんどの場合、コマンドラインでは正常に動作しますが、システムサービスで起動すると機能しません。 私はこの行が問題の核心であることをすぐに見つけました。 /usr/bin/gdbus monitor --system --dest org.freedesktop.ModemManager1 コマンドラインから起動すると、USBモデムはSMSメッセージを受信するたびに1行を印刷します。これが私が期待したものであり、私に必要なものです。 出力例(注釈付き): # at the start Monitoring signals from all objects owned by org.freedesktop.ModemManager1 The name org.freedesktop.ModemManager1 is owned by :1.5 # when a message arrives /org/freedesktop/ModemManager1/Modem/0: org.freedesktop.DBus.Properties.PropertiesChanged ('org.freedesktop.ModemManager1.Modem.Messaging', {'Messages': <[objectpath '/org/freedesktop/ModemManager1/SMS/19']>}, @as []) /org/freedesktop/ModemManager1/Modem/0: org.freedesktop.ModemManager1.Modem.Messaging.Added (objectpath '/org/freedesktop/ModemManager1/SMS/19', true) サービスファイルを追加した後にsystemdサービスと同じスクリプトを起動すると、同じ操作は実行されません。gdbus同じ2行を出力することから始めます。監視というのですがgdbusそうではありません。テキストメッセージが続きましたが、目立たなかった。 サービスが実行されているか、スクリプトがgdbus実行されているか、同じユーザーIDを確認しました。 rootで実行しても役に立ちません。 コマンドラインとsystemdの違いは何ですか?どうすれば解決できますか? サービスファイル - 特別なものはありません。 [Unit] Description=Read incoming SMS messages After=network-online.target [Service] Type=exec User=smsuser Environment=LANG=en_US.UTF-8 ExecStart=/bin/bash /opt/sms/sms_read_service ModemNameArg Restart=on-failure [Install] WantedBy=multi-user.target 修正する: 私はそれを働かせました: # shortened for brevity busctl --system monitor ... --match type='signal',interface='...',member='...'") ただし、rootユーザーとしてのみ可能です。これはD-Busセキュリティポリシーで説明できるようです。 使用法の違いを引き起こす原因が何であるかgdbusに関する質問が残っています。

Admin

起動時にXの場合はAをマウントし、それ以外の場合はBをマウントします。
systemd
mount
systemd-unit
systemd-mount

起動時にXの場合はAをマウントし、それ以外の場合はBをマウントします。

文脈は次のとおりです。これは別の質問です私のもの。 TL、DR:ほとんどのホームフォルダは、私が持ち歩いてさまざまな職場や家にマウントする外付けドライブにあります。 unionfs /HomeLocal=RW:/mnt/external_drive/HomeRoaming=RW /home次の行を使用してインストールを完了しますfstab。 /HomeLocal=RW:/mnt/external_drive/HomeRoaming=RW /home fuse.unionfs auto,suid,exec,nonempty,max_files=32768,allow_other,x-systemd.requires=/mnt/external_drive (/HomeLocal は私のローカルプロファイルとローカルユーザーの家を持っています.) これは非常にうまく機能しますしかし、external_driveが存在しない場合、Unionfsは失敗するため、ローカルユーザーは私が空席中にマシンを使用することはできません。したがって、これを達成するためにSystemDマウントデバイスを作成したいと思います。 external_driveが存在する場合は、マウントしてから指示に従ってUnionfsをインストールしてください。 そうでない場合は、/homeに/HomeLocalをマウント(バインド)してください。 SystemD自体にそのような分岐を作成するために必要な機能があるかどうかはわかりません。そうでなければ、ユニットから呼び出されるスクリプトをインストールする方法を選ぶことができるようですが、これを達成するには、正しいユニットファイルを作成する方法についてのアドバイスが必要です。

Admin

最後のターゲットが完了した後にシステムターゲットを起動させる方法は?
systemd
systemd-unit

最後のターゲットが完了した後にシステムターゲットを起動させる方法は?

私はとをt1.target持っていますt2.target。t2.targetすべての依存サービスが完了した後にのみ開始するようにしたいと思います。t1.target今これを嘲笑しましたが、うまくいかないようです。 t1.対象 [Unit] Description=Foo. [Install] WantedBy=multi-user.target t2. [Unit] Description=Bar. After=t1.target Wants=t1.target Requires=t1.target [Install] WantedBy=multi-user.target サービス [Unit] Description=Foo [Service] Type=oneshot ExecStart=/tmp/first.sh [Install] WantedBy=t1.target PartOf=t1.target b.サービス [Unit] Description=Foo [Service] Type=oneshot ExecStart=/tmp/second.sh [Install] WantedBy=t2.target PartOf=t2.target

Admin

システム的で不要なプロセスが再開されます。
linux
systemd

システム的で不要なプロセスが再開されます。

Go言語で書かれたシンプルなサービスがあります。一部のビジネスロジックを使用してWebサーバーを起動します。これでサービスを再ロードする必要があります。これは kill -HUP シグナルです。このシグナルにより、初期プロセスは新しいプロセスで接続を分岐してサービスします。すべてが大丈夫ですが、私たちはsystemdを使ってこのサービスを管理しようとしています。 systemdはこれが失敗だと思って(初期プロセスが終了しました)、再ロードした後にプロセスが再開されるようです。 Aug 11 06:19:12 developmetn systemd[1]: my-proxy.service: Failed with result 'timeout'. Aug 11 06:19:12 developmetn systemd[1]: Failed to start my-proxy image proxy Aug 11 06:19:15 developmetn systemd[1]: my-proxy.service: Scheduled restart job, restart counter is at 508. Aug 11 06:19:15 developmetn systemd[1]: Stopped my-proxy image proxy. Aug 11 06:19:15 developmetn systemd[1]: Starting my-proxy image proxy... 明らかに、これはリロード中に接続を100%提供するというアイデアを排除します。この状況を避ける方法は?我々は努力したタイプ=フォークオプションがありますが、systemctl reload my-proxy.serviceコマンドの実行に時間がかかります。 [Unit] Description=image proxy After=network.target [Service] Type=simple ExecStart=/usr/bin/my-proxy & ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure WorkingDirectory=/etc/my-proxy/ LimitNOFILE=infinity RestartSec=3 [Install] WantedBy=multi-user.target

Admin

디스크 없는 서버: 네트워크 설정 후 서비스 스크립트가 실행되는 이유는 무엇입니까?
systemd

디스크 없는 서버: 네트워크 설정 후 서비스 스크립트가 실행되는 이유는 무엇입니까?

배경: 마스터 노드와 여러 컴퓨팅 노드로 구성된 Slurm 클러스터를 구축하고 있으며 모두 PXE를 통해 부팅됩니다. 처음에는 호스트 이름이 없으며 다른 하드웨어에서 실행될 수 있으므로 NIC의 이름을 예측할 수 없으므로 구성되지 않습니다 /etc/network/interfaces. 시작하는 동안 호스트 이름을 다음과 같이 설정했습니다. root@zorn:/lib/systemd/system# cat /lib/systemd/system/sethostname.service [Unit] Wants=network-pre.target Before=network-pre.target After=local-fs.target DefaultDependencies=false [Service] Type=oneshot ExecStart=/usr/bin/sethostname RemainAfterExit=yes [Install] WantedBy=network.target /usr/bin/sethostname을 사용하십시오: root@zorn:/lib/systemd/system# cat /usr/bin/sethostname #!/usr/bin/bash hnm=node$(/usr/bin/cat /sys/class/net/*/address | /usr/bin/head -1 | /usr/bin/sed 's/://g') echo $hnm > /proc/sys/kernel/hostname echo $hnm > /etc/hostname 루트 파일 시스템은 /etc/hostname로컬 디스크의 파일에 대한 심볼릭 링크와 마찬가지로 NFS를 통해 마운트된 R/O입니다. 지금까지는 디스크 없는 노드를 시작할 때 호스트 이름이 다음과 같이 설정되었습니다 node6c2408faee43. root@node080027aea419:~# hostnamectl Static hostname: node080027aea419 Icon name: computer-vm Chassis: vm

Admin

不足しているサービスの実行を補うためのsystemd.timer
systemd
sleep
systemd-timer

不足しているサービスの実行を補うためのsystemd.timer

フォローアップ20日ごとの作業スケジュール、 これは更新目的のため、20日以内に完了できます。しかし、私はほとんどの時間をスリープ状態に保つラップトップで作業しています。したがって、保証された実行は必須です(cronにはこれが不足していると読みました)。 私は印象を受けたので、cromの代わりにsystemd.timerを選択しました。「システムが起きてからスリープモードでスケジュールされた時間が経過した場合でも機能します。」 しかし、私はそうではないことが判明しました。 マニュアルページによると、唯一の終了オプションは次のとおりですPersistent=。 ブールパラメータを使用します。 trueの場合、サービスユニットが最後にトリガされた時間がディスクに保存されます。タイマーが有効になると、タイマーが無効になっている間にサービスデバイスが1回以上トリガされた場合、サービスデバイスはすぐにトリガされます。ただし、これらのトリガーはまだRandomizedDelaySec =によって課される遅延の影響を受けます。これは、システムの電源が切れたときに見逃したサービスの実行に追いつくのに役立ちます。この設定は、OnCalendar =で設定されたタイマーにのみ有効です。 OnUnitActiveSec=20dしかし、私はrequireの代わりに私が使っていることに気づいたので、それをOnCalendar=使うのPersistent=trueは役に立ちません。20日ごとの作業スケジュールケースでしょ? コンピュータシステムがスリープモードで目覚めた後にsystemd.timer逃した予定のサービスの実行に追いつくことはできますか?OnUnitActiveSec= PS。私のすべてのシステムパッケージ: libpam-systemd:amd64_249.11-0ubuntu3.6 libsystemd0:amd64_249.11-0ubuntu3.6 python3-systemd_234-3ubuntu2 systemd_249.11-0ubuntu3.6 systemd-sysv_249.11-0ubuntu3.6 systemd-timesyncd_249.11-0ubuntu3.6

Admin

システムサービス命名規則はどのように機能しますか?
arch-linux
systemd

システムサービス命名規則はどのように機能しますか?

Arch Linux、systemd 252(252.4-2-arch) 行為: systemctl status [email protected] 結果: Loaded: loaded (/usr/lib/systemd/system/[email protected]; enabled; preset: disabled) ただし、実行中: systemctl list-unit-files 同じ名前は表示されません。以下のみ表示されます。 [email protected] disabled disabled [email protected] indirect disabled 命名規則にこれらの違いがあるのはなぜですか。このリストで無効になっているように見えるのはなぜですか。

Admin

再起動=常ににもかかわらず、システムサービスがエラーで再起動されない
systemd
journalctl

再起動=常ににもかかわらず、システムサービスがエラーで再起動されない

エラーを確認して使用してください。journalctl -u raspotify --since=yesterday | grep ERROR Dec 26 22:50:11 raspberrypi librespot[3024]: [2020-12-26T21:50:11Z ERROR librespot] Could not connect to server: failed to lookup address information: Temporary failure in name resolution 以下を使用して手動で再起動します。systemctl restart raspotify エラーが発生したときにサービスを自動的に再起動するには、サービスで何を変更する必要がありますか? cat /lib/systemd/system/raspotify.service: [Unit] Description=Raspotify After=network.target [Service] User=raspotify Group=raspotify Restart=always RestartSec=10 PermissionsStartOnly=true ExecStartPre=/bin/mkdir -m 0755 -p /var/cache/raspotify ; /bin/chown raspotify:raspotify /var/cache/raspotify Environment="DEVICE_NAME=raspotify (%H)" Environment="BITRATE=160" Environment="CACHE_ARGS=--disable-audio-cache" Environment="VOLUME_ARGS=--enable-volume-normalisation --linear-volume --initial-volume=100" Environment="BACKEND_ARGS=--backend alsa" EnvironmentFile=-/etc/default/raspotify ExecStart=/usr/bin/librespot --name ${DEVICE_NAME} $BACKEND_ARGS --bitrate ${BITRATE} $CACHE_ARGS $VOLUME_ARGS $OPTIONS [Install] WantedBy=multi-user.target ACTION=="add", SUBSYSTEM=="net", KERNEL=="wl*", RUN+="/usr/bin/iw dev $name set power_save off"

Admin

サービスが有効、無効、実行中、または停止していることを確認する
systemd
opensuse

サービスが有効、無効、実行中、または停止していることを確認する

サービスが有効、無効、実行中、または停止していることを確認できますか? service $app statusサービスが実行中か停止しているかを確認するために使用できますが、サービスが無効になっているかどうかはどうすればわかりますか? 私はOpenSUSEを実行しています。

Admin

システムユーザーサービスを有効にするDEB postinstスクリプトを作成するには?
systemd
deb

システムユーザーサービスを有効にするDEB postinstスクリプトを作成するには?

systemdユーザーサービスをインストールするためにDEBファイルを生成し、インストール後にpostinstスクリプトを使用してサービスを有効にしてみました。これは私のpostinstスクリプトです。 #!/bin/bash set -e systemctl --user enable myservice.service DEB() をインストールすると、dpkg --install mypackage.debpostinst スクリプトが実行され、次のエラーメッセージが返されます。 バスに接続できません。そのファイルやディレクトリはありません。 システムサービスも利用できず、パッケージも公開されないため、どのパッケージング標準も気にしません。これを行うために私ができることはありますか? これが不可能な場合は、起動するたびにアクティブになるようにinitスクリプトに追加します。しかし、可能であればこれを避けたいと思います。

Admin

systemdサービスを使用してデスクトップ通知を開始するノードアプリケーションを実行する方法
linux
systemd
notifications

systemdサービスを使用してデスクトップ通知を開始するノードアプリケーションを実行する方法

以前に検索した結果、これはできないという回答が出たようですが、私がLinuxの専門家ではないので、それでも聞いてみたかったです。毎秒デスクトップ通知を開始するnodejsで作成された小さなアプリがあります。 import notifier from 'node-notifier' import {CronJob} from 'cron'; /* Create a cron job that send a desktop notification every second */ const job = new CronJob('* * * * * *', () => { notifier.notify({ title: 'My notification', message: 'Hello, there!', }); }, null, true, 'America/Los_Angeles'); job.start() 私が走るとき、これはうまくいきますnpm run start。 systemdサービスを使用して実行したいと思います。 [Unit] Description=should run node app which launch a desktop notification After=network.target [Service] Environment="DISPLAY=:0" "XAUTHORITY=/home/myuser/.Xauthority" Type=simple User=myuser ExecStart=/home/myuser/.nvm/versions/node/v16.13.1/bin/node /home/myuser/notify_send/notify_node/build/index.js Restart=on-failure [Install] WantedBy=multi-user.target サービスを開始してから数秒後、ステータスコマンドは次のように表示されます。 ● runjs.service - should run node app which launch a desktop notification Loaded: loaded (/etc/systemd/system/runjs.service; disabled; vendor preset: enabled) Active: active (running) since Sun 2022-12-04 17:47:40 CET; 22s ago Main PID: 5606 (node) Tasks: 20 (limit: 18651) Memory: 18.1M CGroup: /system.slice/runjs.service ├─5606 /home/myuser/.nvm/versions/node/v16.13.1/bin/node /home/myuser/notify_send/notify_node/build/index.js ├─5633 /bin/sh -c notify-send "My notification" "Hello, there!" --expire-time "10000" ├─5634 notify-send My notification Hello, there! --expire-time 10000 ├─5639 dbus-launch --autolaunch=017e96ffe51b466384d899f21cbecdc5 --binary-syntax --close-stderr ├─5640 /usr/bin/dbus-daemon --syslog-only --fork --print-pid 5 --print-address 7 --session ├─5642 /usr/bin/dbus-daemon --syslog-only --fork --print-pid 5 --print-address 7 --session └─5643 /usr/bin/plasma_waitforname org.freedesktop.Notifications dic 04 17:47:40 slimbook systemd[1]: Started should run node app which launch a desktop notification. dic 04 17:48:00 slimbook dbus-daemon[5640]: [session uid=1000 pid=5638] AppArmor D-Bus mediation is enabled dic 04 17:48:00 slimbook dbus-daemon[5640]: [session uid=1000 pid=5638] Activating service name='org.freedesktop.Notifications' requested by ':1.0> ただし、サービスの実行中はデスクトップ通知は開始されません。 よろしくお願いします。 編集する @edgar-magallonが提案した変更を適用したら、追加情報を追加してください。 $ sudo systemctl status runjs.service ● runjs.service - should run node app which launch a desktop notification Loaded: loaded (/etc/systemd/system/runjs.service; disabled; vendor preset: enabled) Active: failed (Result: exit-code) since Sat 2022-12-24 00:26:59 CET; 4s ago Process: 3281 ExecStart=/home/user/notify_send/notify_node/build/runApp (code=exited, status=127) Main PID: 3281 (code=exited, status=127) dic 24 00:26:59 slimbook systemd[1]: runjs.service: Scheduled restart job, restart counter is at 5. dic 24 00:26:59 slimbook systemd[1]: Stopped should run node app which launch a desktop notification. dic 24 00:26:59 slimbook systemd[1]: runjs.service: Start request repeated too quickly. dic 24 00:26:59 slimbook systemd[1]: runjs.service: Failed with result 'exit-code'. dic 24 00:26:59 slimbook systemd[1]: Failed to start should run node app which launch a desktop notification. そしてログ: $ sudo journalctl -xeu runjs.service -- Support: http://www.ubuntu.com/support -- Support: http://www.ubuntu.com/support -- -- The unit runjs.service has entered the 'failed' state with result 'exit-code'. dic 24 00:26:59 slimbook systemd[1]: runjs.service: Scheduled restart job, restart counter is at 5. -- Subject: Automatic restarting of a unit has been scheduled -- Defined-By: systemd -- Support: http://www.ubuntu.com/support -- -- Automatic restarting of the unit runjs.service has been scheduled, as the result for -- the configured Restart= setting for the unit. dic 24 00:26:59 slimbook systemd[1]: Stopped should run node app which launch a desktop notification. -- Subject: A stop job for unit runjs.service has finished -- Defined-By: systemd -- Support: http://www.ubuntu.com/support -- -- A stop job for unit runjs.service has finished. -- -- The job identifier is 2072 and the job result is done. dic 24 00:26:59 slimbook systemd[1]: runjs.service: Start request repeated too quickly. dic 24 00:26:59 slimbook systemd[1]: runjs.service: Failed with result 'exit-code'. -- Subject: Unit failed -- Defined-By: systemd -- Support: http://www.ubuntu.com/support -- -- The unit runjs.service has entered the 'failed' state with result 'exit-code'. dic 24 00:26:59 slimbook systemd[1]: Failed to start should run node app which launch a desktop notification. -- Subject: A start job for unit runjs.service has failed -- Defined-By: systemd -- Support: http://www.ubuntu.com/support -- -- A start job for unit runjs.service has finished with a failure. -- -- The job identifier is 2072 and the job result is failed. 私は何が間違っていましたか?

Admin