私のcronjobがシェルスクリプトを実行しないのはなぜですか? [閉鎖]

私のcronjobがシェルスクリプトを実行しないのはなぜですか? [閉鎖]

毎晩データベースダンプを生成するcrontabがあります。

20 3 * * * /path/to/dailydump.sh

dailydump.sh含む:

#!/bin/sh

DATENAME=`date +%Y%m%d`

BASENAME="/path/to/dumps/db_${DATENAME}.sql"

/usr/bin/mysqldump -hhost -uusername -ppassword databasename > ${BASENAME}

権限は次のとおりです。

-rwx---r-x 1 ... dailydump.sh
drwxr-xrwx 2 ... dumps

私のcronjobが機能しないのはなぜですか?

ルートアクセス権なしで共有サーバーにあります。ログインし/var/log/cronていません/var/log/syslog/var/mail/<user_name>または、メールがなく(実際には、/var/spool/mail/<user_name>まったくメールがありません)、エラーメッセージはメールに送信されず、ログファイルは保存されません。何も返しません。 (望むより/var/mail//var/spool/[email protected]1 2 * * * /path/to/your/command &>/path/to/mycommand.logps -ef | grep cron | grep -v grep?https://serverfault.com/a/449652)

すべてのファイルを新しいドメインに移動し、新しいcrontabを設定する必要があるまで、全体の設定は正しく機能しました。 (はい、すべてのパスとデータベースログインを更新しました。それも何度も確認しました。)同じホスティングプロバイダと同じコンピュータにあるため、環境は変更されませんでした。

どんな助けでも大変感謝します。


「解決策」

まあ、これが一番変です。私のプロバイダのヘルプセンターは、cronjobによって実行されるスクリプトがパスワードで保護されたディレクトリにある場合は、スクリプトパスを-auth=user:password -source前に追加する必要があると述べています。だから私は以下を追加しました(正しい認証を含む)。

20 3 * * * -auth=user:password -source /path/to/dailydump.sh

明らかにする私にエラーメッセージをメールで送信しました。(非常にMAILTO=効果的です)/bin/sh: -=: invalid option利用可能なオプションを教えてください。ヘルプセンターの例では、実際には物理的なパス(/path/to/file)ではなくURL(http://...)だけを教えて、Crontabを削除して再度保存しauthました。source今、クソジョブが実行中です!crontabは文字ごとに以前と同じように見えますが、今では目立つコードを変更せずに実行されます。

何が問題なのかわかりませんが、間違ったコードを挿入して再度削除することで問題が解決しました。 o_Oは実際にcronjobのように見えます。した常に実行されます(実行されないと明らかにエラーが発生するため)。何もしていませんでした!とても神秘的です。誰かが私にこれを(再現可能な方法で)説明できるならば、私は賞金200を提供し(必要な2日を待ってから)授与します。

あるいは、@chaosはシェルスクリプトを完全に回避し、cronがデータベースを直接ダンプするための別のソリューションを提供しました(以下の回答の説明を参照)。

20 3 * * * /usr/bin/mysqldump -hhost -uusername -ppassword データベース名 > /path/to/dumps/db_$(date +\%Y\%m\%d).sql

パーセント記号をエスケープすることを忘れないでください。それ以外の場合、スクリプトは「予期しないEOF」を検出します。

みんなの助けに感謝します。私は再び多くのことを学びました(ここで間違っているわけではありません)。

ベストアンサー1

cronデーモンが実行中であり、それに準拠していることを確認するには、crontab簡単なテストを実行できます。crontab次の項目で編集してください。

* * * * * /bin/date >>/tmp/test

1分後に/tmp/test.txtファイルを確認してください。ファイルがないとデーモンが実行されない可能性が高くなります。この場合は、プロバイダのサポートチームにお問い合わせいたします。

編集する:

cron インスタンスの環境を確認するには、次の手順を実行する必要があります。

* * * * * /usr/bin/id >>/tmp/test
* * * * * /usr/bin/env >>/tmp/test

次に、ファイルの内容を表示します。

おすすめ記事