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