このコマンドを実行してみました。
$ nano /usr/bin/script.sh
$ chmod +x /usr/bin/script.sh
$ cat /lib/systemd/system/shellscript.service
[Unit]
Description=My Shell Script
[Service]
ExecStart=/usr/bin/script.sh
[Install]
WantedBy=multi-user.target
$ systemctl daemon-reload
$ systemctl enable shellscript.service
$ systemctl start shellscript.service
ただし、サービスの状態を確認すると、次の結果が表示されます。
$ systemctl status shellscript.service
shellscript.service - My Shell Script
Loaded: loaded (/lib/systemd/system/shellscript.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2022-05-23 13:20:33 EEST; 14s ago
Process: 1276 ExecStart=/usr/bin/script.sh (code=exited, status=1/FAILURE) Main PID: 1276 (code=exited, status=1/FAILURE)
CPU: 10ms
May 23 13:20:33 kali systemd[1]: Started My Shell Script.
May 23 13:20:33 kali script.sh[1276]: /usr/bin/script.sh: line 25: AthanMayT.txt: No such file or directory
May 23 13:20:33 kali systemd[1]: shellscript.service: Main process exited, code=exited, status=1/FAILURE
May 23 13:20:33 kali systemd[1]: shellscript.service: Failed with result 'exit-code'.
答え1
あなたのshellscript.service
定義は有効です。シェルスクリプトが実行されますが、行25の一部のコマンドはエラーメッセージを返します。
AthanMayT.txt: No such file or directory
これにより、スクリプトは失敗を示すステータスコード 1 で終了します。
この種のエラーは、通常、現在の作業ディレクトリが予想されるディレクトリと異なるために発生します。
systemdによって実行されるプロセスやスクリプトはsystemd
通常、ユーザーのホームディレクトリでは実行されません。 systemdによって開始されたプロセスのデフォルトの作業ディレクトリは、システムのルートディレクトリまたは/
。
問題を解決するには、次のスクリプトを実行してsystemdが実行される条件をシミュレートします。
cd /
/usr/bin/script.sh
スクリプトで参照される各ファイルにフルパス名を使用するか、相対cd /full/path/to/some/directory
パス名が期待どおりに解釈されるようにスクリプトの先頭に明示的に含める必要があります。