毎晩データベースダンプを生成する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.log
ps -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
次に、ファイルの内容を表示します。
答え2
- スクリプトを直接実行して動作することを確認します。
- スクリプトがcrontabで実行されている場合、スクリプトの設定方法によっては、一部のシェル環境変数を使用できない場合があります。
環境変数が問題かどうかをテストするには、スクリプトを修正してみてください。
sh --login -c "/usr/bin/mysqldump -hhost -uusername -ppassword databasename > ${BASENAME} > /path/to/LogFile.txt 2>&1"