私はsystemdサービスによって管理される最小限のスクリプトを持っていますoneshot
。時には、このスクリプトによってエコーされた標準出力がsystemdログに表示されます。時にはそうではありません。ランダムに表示される確率は約50%です。
システムサービス:
> cat ~/.config/systemd/user/simple.service
[Unit]
Description=Simple service
[Service]
ExecStart=/bin/sh -c "/home/miles/temp/simple.sh"
Type=oneshot
RemainAfterExit=1
内部スクリプト:
> cat /home/miles/temp/simple.sh
#!/usr/bin/env bash
echo Starting simple
echo exiting
exit 0
次のコマンドを使用してサービスを再起動しました。
> systemctl --user restart simple.service
時々、予想されるスクリプト出力が表示されます。
> systemctl status --user simple.service
● simple.service - Simple service
Loaded: loaded (/home/miles/.config/systemd/user/simple.service; static)
Active: active (exited) since Thu 2023-11-16 19:54:59 PST; 1min 57s ago
Process: 3617756 ExecStart=/bin/sh -c /home/miles/temp/simple.sh (code=exited, status=0/SUCCESS)
Main PID: 3617756 (code=exited, status=0/SUCCESS)
CPU: 4ms
Nov 16 19:54:59 miles-desk systemd[3064]: Starting Simple service...
Nov 16 19:54:59 miles-desk sh[3617757]: Starting simple
Nov 16 19:54:59 miles-desk sh[3617757]: exiting
Nov 16 19:54:59 miles-desk systemd[3064]: Finished Simple service.
時々再起動すると、スクリプト出力が失われます。
> systemctl status --user simple.service
● simple.service - Simple service
Loaded: loaded (/home/miles/.config/systemd/user/simple.service; static)
Active: active (exited) since Thu 2023-11-16 19:58:57 PST; 29s ago
Process: 3621103 ExecStart=/bin/sh -c /home/miles/temp/simple.sh (code=exited, status=0/SUCCESS)
Main PID: 3621103 (code=exited, status=0/SUCCESS)
CPU: 4ms
Nov 16 19:58:57 miles-desk systemd[3064]: Starting Simple service...
Nov 16 19:58:57 miles-desk systemd[3064]: Finished Simple service.
ただし、数回再起動すると、次の出力が再表示されます。
● simple.service - Simple service
Loaded: loaded (/home/miles/.config/systemd/user/simple.service; static)
Active: active (exited) since Thu 2023-11-16 20:01:53 PST; 6s ago
Process: 3622119 ExecStart=/bin/sh -c /home/miles/temp/simple.sh (code=exited, status=0/SUCCESS)
Main PID: 3622119 (code=exited, status=0/SUCCESS)
CPU: 4ms
Nov 16 20:01:53 miles-desk systemd[3064]: Starting Simple service...
Nov 16 20:01:53 miles-desk sh[3622120]: Starting simple
Nov 16 20:01:53 miles-desk sh[3622120]: exiting
Nov 16 20:01:53 miles-desk systemd[3064]: Finished Simple service.
出力が表示されるかどうかは完全にランダムに表示されます。フラッシュに問題がある可能性がありますが、サービスが完了した後にsystemdからすべての出力をフラッシュしたいと思います。
バージョン情報:
> systemd --version
systemd 249 (249.11-0ubuntu3.11)
+PAM +AUDIT +SELINUX +APPARMOR +IMA +SMACK +SECCOMP +GCRYPT +GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN +IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 -PWQUALITY -P11KIT -QRENCODE +BZIP2 +LZ4 +XZ +ZLIB +ZSTD -XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified
> uname -a
Linux miles-desk 6.2.0-36-generic #37~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Oct 9 15:34:04 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
答え1
記録で競争条件にぶつかったようです。SCM_CREDS#2913との/ procレースのため、Journaldは終了したプロセスから着信メッセージをそのcgroupに帰属できません。:
Journalctl --user-unit=... ユーザー操作が終了する直前に発生したログ行を削除するようです。
Lennart Poetteringがコメントしました。FreeDesktop.orgエラー:
これはゲームです。 SCM_CREDENTIALSを使用してクライアントPIDを取得し、/procで_CMDLINE/_COMM/_EXECとcgroupd ataをすばやく読み取ろうとしますが、この時点でプロセスが中断された可能性があります。
この問題を正しく解決するには、cmdline / comm / exeプロセスをインポートするのにSCM_COMMの程度が必要で、競合のない方法でcgroupデータをインポートするSCM_CGROUPSが必要です。カーネルに追加されるまでアクティブです。これらの項目は配管工の希望のリストにあります。なぜならこれを提供するカーネル担当者が必要だからです。
私が見つけた解決策Yevgeny Vereshchaginの返信以前は:
[Unit]
Description=Simple service
[Service]
SyslogIdentifier=simple-service
ExecStart=/home/miles/temp/simple.sh
Type=oneshot
RemainAfterExit=1
...重要な変更が追加されましたが、行もSyslogIdentifier=simple-service
単純化されました/bin/sh -c "/home/miles/temp/simple.sh"
。他のシェルを呼び出す必要はありません/bin/sh
。 simple.shが実行可能であることを確認してください。すでに便利なsh-bangラインがあります。
出力は実際には以前ログにありましたが、デバイスとは何の関係もありません。sh
私はsyslogから出てくるとマークされているだけです。
Nov 17 11:58:00 workstation sh[409442]: Starting simple
Nov 17 11:58:00 workstation sh[409442]: exiting
SyslogIdentifier
出力は次のようなので、使用するのが回避策です。まだユニットとは関係ありませんが、日記で簡単に見つけることができます。
$ journalctl --user SYSLOG_IDENTIFIER=simple-service
-- Logs begin at Fri 2023-06-09 08:11:26 EDT, end at Fri 2023-11-17 12:16:10 EST. --
Nov 17 12:16:10 workstation simple-service[409845]: Starting simple
Nov 17 12:16:10 workstation simple-service[409845]: exiting