web-dev-qa-db-ja.com

crontabで1つのwgetコマンドしか機能しないのはなぜですか?

サーバー上のPHPスクリプトから1日2回コンテンツをフェッチし、クエリ変数langを変更して必要な言語を設定し、このコンテンツを2つの言語で保存します特定のファイルこれは私のcrontabです:

*/15 * * * * ~root/Apache.sh > /var/log/checkapache.log
10 0 * * * wget -O /path/to/file-sv.sql "http://mydomain.com/path/?lang=sv"
11 0 * * * wget -O /path/to/file-en.sql "http://mydomain.com/path/?lang=en"

問題は、最初のwgetコマンドラインのみが実行されていることです(正確には、書き込まれているファイルは/path/to/file-sv.sqlのみです)。 2行目と3行目を入れ替えると、代わりに/path/to/file-en.sqlが書き込まれます。最初の行は、どこにあっても、常に期待どおりに実行されます。

次に、lynx -dump "http://mydomain.com/path/?lang=xx" > /path/to/file-xx.sqlを使用して失敗しました。それでも最初のlynx行のみが正常に実行されました。 wgetとlynxを混ぜてもこれは変わりませんでした!

ちょっと必死になってる!何か不足していますか? crontab(と組み合わせて)wgetまたはlynxには何千もの記事がありますが、すべて基本的な設定と構文をカバーしているようです。誰かが私が間違っていることの手掛かりを得ましたか?

おかげで、
アレクサンダー

16

Crontabの最後に改行を追加してみてください。

43
gelraen

間違っているテキストについて何かがあります。 vimでcrontabを編集してから、非表示の文字を表示します。

:set invlist

確認して修正できるはずです。

2
bahamat

リダイレクトを追加して、crontabをデバッグします(またはルートメールを読み取ります)。

11 0 * * * wget -O /path/to/file-en.sql "http://mydomain.com/path/?lang=en" > /tmp/crontab_ouptput 2> /tmp/crontab_error

また、コンソールから「wget -O /path/to/file-en.sql " http://mydomain.com/path/?lang=en "」を実行します。

また、新しいcrontabの検証には「crontab -e」を使用します。

また、機能していない行を削除して、キーボードから再入力してみてください。

Corntabをバックアップしてコマンドを実行します。

crontab -l | crontab -
1
alvosu

cronieを実行しているシステムで上記の回答(改行の追加、改行の削除など)を試すのに少し時間を費やしました。最終的にcronie 1.5.3にバグがあり、が各ユーザーの最初のcronジョブのみを実行する1.5.4で修正されています

https://github.com/cronie-crond/cronie/issues/

これが誰かの時間を節約することを願っています...

1
Jeroen