一日の特定の時間に実行する必要があるバックアップスクリプトがあるので、そのタスクを使用しており、cron
cronからバックアップスクリプトの出力をlogfile
。
crontab -e
*/1 * * * * /home/ranveer/backup.sh &>> /home/ranveer/backup.log
上記のcronエントリの両方がstderr and stdout
ログファイルにリダイレクトされます。
上記のcronジョブは正常に実行され、syslog
ファイルに記載されている操作を実行しますbackup.sh
が、ログファイルには何も書きません。
/var/log/syslog
Oct 19 20:26:01 ranveer CRON[15214]: (ranveer) CMD (/home/ranveer/backup.sh &>> /home/ranveer/backup.log)
cliでスクリプトを実行すると、必要に応じて動作し、出力をログファイルに書き込みます。
ranveer@ranveer:~$ ./backup.sh &>> backup.log
ranveer@ranveer:~$ cat backup.log
Fri Oct 19 20:28:01 IST 2012
successfully copied testdir
test.txt successfully copied
-------------------------------------------------------------------------------------
ranveer@ranveer:~$
それでは、ファイル出力がcronからファイルにリダイレクトされないのはなぜですか?
答え1
この問題を解決しました。 2つの方法があります。
M1
リダイレクトをからに変更&>>
します2>&1
。これで、crontab -e
次のようになります。
*/1 * * * * /home/ranveer/vimbackup.sh >> /home/ranveer/vimbackup.log 2>&1
私は信じる上記の方法は、デフォルトでは実行ジョブが代わりにcron
使用されるためサポートされていないため機能します。sh
bash
&>>
sh
M2
SHELL=/bin/bash
ファイルを追加してデフォルトのシェルを変更しますcrontab -e
。
答え2
免責事項[1]。
脚注や付録を追加したい@RanRagからの返信。
シェルリダイレクト構文がこれに準拠していることを確認してください/bin/sh
。無効なシェルリダイレクト構文を使用しようとすると、/bin/sh
コマンドは失敗し、クローン操作は実行されません。
構成ファイルで/etc/cron.d/example1
そうでないユーザーを指定し、root
そのユーザーのログインシェルが/bin/bash
...でない場合でも、コマンドに/ bin / sh構文を使用する必要があります/etc/cron.d/example1
。
例えば
ユーザーにシェルcsh
またはzsh
ログインksh
シェルセットがある場合。構成ファイルでは、/etc/cron.d/example1
コマンドは構文を使用する必要があります/bin/sh
。特に、すべてのシェルリダイレクトは/bin/sh
構文的でなければなりません。
csh
クローンジョブでシェルリダイレクト構文を使用しようとすると、クローンジョブは/etc/cron.d/example1
実行されません。crond
見つかったログファイルは/var/log/cron
コマンドが実行されたことを示す必要がありますが、コマンドが実行される前にコマンドで構文エラーが発生します。
crond
構文エラーエラーメッセージはどこに発行されますか?
このバグはで報告されていません/var/log/cron
。crond
代わりに、デフォルトではすべてのエラーメッセージが表示されますmail
。したがって、/var/spool/mail/${USER}
正確に何がエラーであるかを確認する必要があります。
[1]
婦人声明
- この答えは
sysv
システムを想定しています。 systemd
情報は異なる場合があります- 特に、この情報は
centos-6
ディストリビューションについて学習され、他のディストリビューsysv
ションには適用されない可能性があります。- ディストリビューションによって実装が
centos-6
異なる可能性があるため、特に言及します。crond
centos-6
- ディストリビューションによって実装が
答え3
次の例に示すように、2 より大きい記号を使用して出力情報をログファイルに送信できます。
* * * * * /usr/bin/python /path/to/script.py >> /path/to/logfile/output.log
次のリンクで、この便利なcrontabラインジェネレータを確認してください。https://crontab-generator.org/