リモートデータベースのローカルコピーを維持するために複数のcron
タスクを設定しました。
最初は、毎日実行され、正常に動作するリモートコンピュータから最新バージョンのデータベースをダウンロードします。
2番目はダウンロードしたデータを取得しますが、機能しません。
これは単純なシェルスクリプトです。
#!/bin/bash
mysql -u root -mypass -h localhost my_db < my_db.sql
cron ジョブは次のように設定されます。
0 8 * * * bash /home/lampadmin/cron/my_db.sh
シェルスクリプトを手動で実行すると正常に動作します。
機能しない理由をcronで調べるにはどうすればよいですか?
答え1
Bash を削除するには:
0 8 * * * /home/lampadmin/cron/my_db.sh
また、 my_db.sh が実行可能であることを確認してください。
chmod a+x /home/lampadmin/cron/my_db.sh
答え2
このファイルを誰もが実行できるようにするのは気にしません。私はこれをあなたの最初のアイデアに近づけようとします。
0 8 * * * /bin/bash /home/lampadmin/cron/my_db.sh
コマンドを実行するには、常にフルパスを使用することをお勧めします。そうでなければ、あなたは何を得るのか決してわかりません。したがって、my_db.sql
ファイルへのフルパスも提供する必要がありますmy_db.sh
。
しかし、それ以外の場合は、コマンドラインでパスワードを設定することについてより悪い感情を感じます。ps
スクリプトが実行されると、ルートパスワードがすべてのユーザーに表示されます。
.my.cnf
このようなファイルでパスワードを設定することをお勧めします
[mysql]
user=root
password=rootpassword
そのユーザーのホームディレクトリにあります。この方法が要件と比較して一般的すぎる場合は、追加ファイルに入れて/home/lampadmin/cron/my.cnf
この設定を使用できます。
/usr/bin/mysql --defaults-extra-file=/home/lampadin/cron/my.cnf -h localhost mydb < /pathto/my_db.sql
いかなる場合でも、お客様のmy.cnf
パスワードは、そのパスワードにアクセスできるユーザーによってのみ保護されます。使用する必要があります
chmod go-rwx my.cnf
これを達成するために。