毎日真夜中に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.timer
およびbackup.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
にリストされているため、うまくいけばうまくいきます。
更新:すべてが現在機能していることを確認できます。
これが私に起こったのは、私のスクリプトにDOSの行末があり、それが常にスクリプトの上部にあるシバン行を台無しにしていたからです。私はそれをUnixの行末に変更しましたが、うまくいきました。
単純化するために、ExecStartスクリプトの先頭にハッシュバンを追加してください。
#!/bin/bash
python -u alwayson.py
それがスクリプトのコピー/貼り付けである場合、次の行を並べ替えています。
#!/usr/env/bin bash
#!/usr/env/bin
はありません、あなたは#!/usr/bin/env
を意味していました。
node.jsアプリをバックグラウンドサービスとして実行するにはどうすればよいですか? からの回答を実際に使用しました。私の場合、不在時に実行できるようにする必要があるDiscordボットを作成していました。
このサービスを導入すると、最初に最初のポスターと同じエラーが発生し、ここに来ました。実行したnode.jsスクリプトの上部に#!/usr/bin/env node
がありませんでした。
それ以来、問題はありませんが、他にサービス自体に拡張できるものを見たいと思っています。
今日もMain process exited, code=exited, status=203/EXEC
に出くわしましたが、バグは実行可能ファイルをファイルに追加するのを忘れたことです。