cronでスクリプトを実行しましょう

cronでスクリプトを実行しましょう

crontabエントリに基づいて実行するスクリプトを取得しようとしています。私のスクリプトは端末で正しく実行されますが、cronエントリに基づいて自動的には実行されません。スクリプトは、時間ごとに/testexport1ディレクトリに空のファイルを作成します。

次のようにcrontab -eを使用してcrontabを編集します。

30 * * * * /bin/bash/ /testexport1/./createfilescript.sh

スクリプト自体は次のとおりです。

[root@centostest testexport1]# cat createfilescript.sh
#!/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/testexport1

today="$( date +"%Y%m%d" )"
number=0

while test -e "$today$suffix.txt"; do
    (( ++number ))
    suffix="$( printf -- '-%02d' "$number" )"
done

fname="$today$suffix.txt"

printf 'Will use "%s" as filename\n' "$fname"
touch "$fname"

スクリプトを実行する場所を指定するために、スクリプトの上部にPATHセクションを追加しました(私が読んだ他の記事に基づいています)。

このcrontabエントリがスクリプトを実行していないような理由をご存知ですか?私はこれが簡単な修正だと確信していますが、今は円を描いています。

答え1

/bin/bash/crontabはスクリプトが見つからないため、スクリプトを実行していません。これは、(/bin/bash最後に見つからない内容を確認する)またはシステム上の正しいパスに変更する必要があります。/bash

また、スクリプトで使用されているすべてのユーティリティが実際に$PATH設定で見つかったことを確認してください。より一般的に調整パスを上書きするのではなく、パスを上書きすることをお勧めします。システムパスには、touch同様のコンテンツを見つけることができるディレクトリが含まれることが多いからです。

答え2

dateバイナリtouchはにあり、/binあなたのものではありません$PATH

答え3

コメントを追加しようとしましたが、まだできませんでした...

cronで実行されているため、cronはファイルがどのフォルダに作成されるのかわからないため、スクリプトの先頭からそのディレクトリに変更するだけで問題は解決されます。

[root@centostest testexport1]# cat createfilescript.sh
#!/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/testexport1

cd  /testexport1

today="$( date +"%Y%m%d" )"
number=0

while test -e "$today$suffix.txt"; do
    (( ++number ))
    suffix="$( printf -- '-%02d' "$number" )"
done

fname="$today$suffix.txt"

printf 'Will use "%s" as filename\n' "$fname"
touch "$fname"

もう一つはcronラインです:

30      *       *       *       *       /bin/bash/ /testexport1/./createfilescript.sh

スクリプトが/testexport1/にある場合は、cron行を次のように変更します。

30      *       *       *       *       /bin/bash /testexport1/createfilescript.sh

関連情報