私のスクリプトはcronのスケジュールに従って実行されません。

私のスクリプトはcronのスケジュールに従って実行されません。

Webアプリケーションが利用可能であることを確認し、Webアプリケーションデーモンを再起動して再実行するスクリプト(Stack Exchangeの助けを借りて)を作成しました(通常は作業を始める前に役立ちます)。毎時間実行する必要があります。

次の行を追加しましたsudo crontab -e

0 * * * * bash /usr/local/bin/test.sh

コンテンツtest.sh:

#!/bin/sh
HTTP_STATUS=$(lynx -head -source https://example.com |head -1 |awk '{print $2}')
calendar=$(date "+%d-%m-%Y - %H:%M")
LOG="Log is placed in /usr/local/bin/test.log"

if [ "$HTTP_STATUS" = "503" ]
then
    systemctl restart mydaemon

    echo "$calendar - site unavailable ($HTTP_STATUS). Daemon restarted." >> test.log
elif [ "$HTTP_STATUS" = "200" ]
then
    echo "$calendar - site available ($HTTP_STATUS)" >> test.log
else
    echo "$calendar - site status unknown ($HTTP_STATUS)" >> test.log
fi

cronには2つの異なるスクリプトが予約されており、毎日真夜中に実行されることを除いてうまくいきます。私のすべてのスクリプトには、同じ権限と同じ所有者があります。

私のtest.logファイルは毎時間更新されないので、スクリプトは実行されないようです。ログエントリを手動で生成するには、スクリプトを実行します。

ベストアンサー1

crontab はログインシェルとは異なる環境でスクリプトを実行します。具体的には、PATHは異なる場合も定義されていない場合もあります。

コマンド(lynx、head ...)に絶対パスを使用してみてください。以下を使用して取得できます。

which <command>

また、test.logへのパスを指定する必要があります。

おすすめ記事