crontabがスケジュールされたbashスクリプトを実行しないのはなぜですか?

crontabがスケジュールされたbashスクリプトを実行しないのはなぜですか?

何度も見ました(12)この質問がありますが、答えが見つかりませんでした。

私は走っているDebian 11しかし、Debianのようなディストリビューションでも同じだと思います。

私のcrontab -e外観:

...
@reboot sleep 20 && /opt/isPromscaleOnOrOff.sh
...

内容は次のとおりですisPromscaleOnOrOff.sh

#!/bin/bash

SERVICE="promscale"
if pgrep -x "$SERVICE" >/dev/null
then
    echo "$SERVICE is running"
else
    echo "$SERVICE is stopped, I will run it now"
    nohup promscale --db-name asdf1234--db-password asdf1234 --db-user asdf1234 --db-ssl-mode allow --install-extensions & >> /dev/null
    disown
fi

ただし、仮想マシンを再起動すると、cronログインが発生してもスクリプトは実行されません。/var/log/システムログcrontab 起動スクリプトを表示します。

私が達成したいことは簡単に達成できます悪魔このプロセスは(私がやった)crontabが私のスクリプトを起動しない理由を知りたいです。

答え1

実行中のジョブは、cronデスクトップと同じランタイム環境では実行されません。変更やその他の環境変数の設定は、ジョブに自動的に伝播されPATHません。たとえば、noなので、GUIプログラムには特別な処理(読み取り)が必要です。~/.bashrccron$DISPLAYman xhost

cron環境変数は、すべてのジョブの読み取りファイルで設定できます。crontabman 5 crontab

echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias各環境の結果を確認してください。

その行はデフォルトで解釈されるため、構文はcommandそれよりも単純なので、環境を設定した後に必要なプログラムを呼び出すスクリプト(実行可能、インストール、開始)を呼び出すことをお勧めします。crontab/bin/sh/bin/bashcommandbash#!/bin/bash

関連情報