Godaddy 共有ホスティング Cpanel アカウントのすべてのデータベースをエクスポートする cron ジョブの実行に問題があります。しかし、以下のコマンドで構文エラーを見つけるのに問題があります。
私のAWS Ec2でも同じコマンドが実行されています。
mysql -N -ubackup -pt -e 'show databases' | while read dbname; do mysqldump -ubackup -p123 --complete-insert -N "$dbname" > /home/test/sqlbackups/'$(date +"%Y-%m-%d")-$dbname'.sql;done
メール受信エラー:
/bin/bash: -c: line 0: unexpected EOF while looking for matching `''
/bin/bash: -c: line 1: syntax error: unexpected end of file
答え1
Crontabコマンドは、エスケープされていないすべてのエントリを%
改行文字で置き換えます。これはから来たものですcrontab(5)
手動私のシステムでは:
コマンドフィールド(行の残りの部分)は実行するコマンドです。行の完全なコマンド部分(改行文字または複数文字まで)は、crontab変数で指定されたシェルによって実行されます
%
。/bin/sh
SHELL
コマンドのパーセント記号(%
)\
は、バックスラッシュ()でエスケープしない限り改行文字に変更され、最初の後のすべてのデータは%
標準入力としてコマンドに送信されます。
crontabコマンドは次のようにする必要があります。
mysql -N -ubackup -pt -e 'show databases' | while read dbname; do mysqldump -ubackup -p123 --complete-insert -N "$dbname" > /home/test/sqlbackups/"$(date +"\%Y-\%m-\%d")-$dbname".sql;done
$(...)
ここでは、以前に一重引用符で囲まれた内容(したがってシェルで拡張されていない内容)も修正しました。
通常、すべての重要なクローン操作を独自のスクリプトに入れてから予約するのが最善です。これにより、そのようなことをよりよく制御でき、特定のタスクに適した通訳者を選択することができます(たとえば、代わりにksh
)。また、cronデーモンが送信するすべての電子メールの件名をより読みやすくします。bash
sh