
5 分ごとにファイルに出力メッセージをログに記録しながら git pull コマンドを実行しようとします。
しかし、このようなエラーが発生しました。
(root) CMD (cd /var/www/sites/ && git pull origin master | sed -e "s/^/$(date +\")
(CRON) error (grandchild #1111 failed with exit status 2)
私のcronjobコマンドは次のとおりです。
*/5 * * * * cd /var/www/site/ && git pull origin master | sed -e "s/^/$(date +\"%d-%m-%y\ %T\"), /" >> /var/log/crond/site.log
どうすれば修正できますか?
答え1
注意:一部のシステムでは、%
crontabではaが特別な意味を持ちます。私のシステムのcrontab(5)より
「6 番目」のフィールド (行の残り) は、実行するコマンドを指定します。行のコマンド部分全体 (改行または「%」文字まで) は、/bin/sh または cronfile の SHELL 変数で指定されたシェルによって実行されます。 コマンド内の「%」文字は、バックスラッシュ (\) でエスケープしない限り、改行文字に変更され、最初の % の後のすべてのデータは標準入力としてコマンドに送信されます。
私強く日付形式の使用をお勧めします%Y-%m-%d
。標準、これは語彙順と時系列順に同じようにソートされます。一部の strftime 実装には、これを省略した表現があります。%F
システムにts
指示
cd /dir && git pull origin master 2>&1 | ts "\%F \%T" >> /var/log/crond/site.log
「リアルタイム」のタイムスタンプを取得するには、コマンドをバッファリング解除する必要があるかもしれません: (本当に醜くなってきました)
cd /dir && stdbuf -oL sh -c 'git pull origin master 2>&1' | ts "\%F \%T" >> /var/log/crond/site.log