1. ホーム
  2. bash

[解決済み] systemd サービス 203/EXEC の失敗 (そのようなファイルやディレクトリがない) を修正する。

2022-02-12 01:09:06

質問

毎日午前0時にbashスクリプトを実行するために、シンプルなsystemdタイマーをセットアップしようとしています。

systemctl --user status backup.service が失敗し、以下のようなログが出力されます。

backup.service: Failed at step EXEC spawning /home/user/.scripts/backup.sh: No such file or directory.

backup.service: Main process exited, code=exited, status=203/EXEC
Failed to start backup.
backup.service: Unit entered failed state.
backup.service: Failed with result 'exit-code'.

ファイルやディレクトリが存在するので、迷ってしまいます。スクリプトは実行可能で、念のためパーミッションも777に設定してあります。

背景を少し。

backup.timerbackup.service ユニットファイルは /home/user/.config/systemd/user .

backup.timer はロードされてアクティブになり、現在深夜に待機しています。

こんな感じです。

[Unit]
Description=Runs backup at 0000

[Timer]
OnCalendar=daily
Unit=backup.service

[Install]
WantedBy=multi-user.target

ここで backup.service :

[Unit]
Description=backup

[Service]
Type=oneshot
ExecStart=/home/user/.scripts/backup.sh

[Install]
WantedBy=multi-user.target

そして最後に、これは言い換えで backup.sh :

#!/usr/env/bin bash

rsync -a --delete --quiet /home/user/directory/ /mnt/drive/directory-backup/

自分で実行してもスクリプトは正常に動作します。

重要かどうかは分かりませんが、私は fish をシェルとして使用します(.bashrcから起動します)。

参考になればと思い、スクリプトの全文を掲載させていただきます。

解決方法は?

答えがわかったような気がします。

の中に .service を追加する必要がありました。 /bin/bash をスクリプトのパスの前に記述してください。

例えば、backup.serviceの場合。

ExecStart=/bin/bash /home/user/.scripts/backup.sh

とは対照的です。

ExecStart=/home/user/.scripts/backup.sh

理由はよくわからない。おそらく fish . 一方、メールのために別のスクリプトを動かしているのですが、サービスファイルは /bin/bash . しかし default.target 代わりに multi-user.target が、しかし。

私が目にしたチュートリアルのほとんどは、このように前置詞に /bin/bash が、その後、私は このSOの回答には、それがありました。 ということで、やってみる価値はあると思いました。

サービスファイルはスクリプトを実行し、タイマは systemctl --user list-timers ということで、うまくいくといいのですが。

更新:現在、すべてが動作していることを確認できました。