次のファイルがありますexecute-backup-from-container.sh
。ファイルの内容は次のとおりです。
#!/bin/bash
FILE=minime.sql.`date +"%Y%m%d".gz`
CONTAINER='mysql_01'
SCRIPT_ON_CONTAINER='/container-mysql-dump.sh'
${OUTPUT}=$(docker exec ${CONTAINER} /$SCRIPT_ON_CONTAINER)
echo "=============="
echo "$CONTAINER:/$FILE"
echo "=============="
docker cp "$CONTAINER:/$FILE" backup-data/
実行するときは、crontab -e
次のように入力します。
0 5 * * 1 /home/me/projects/execute-backup-from-container.sh
これはexecute-backup-from-container.sh
、毎日午前5時に実行する必要があることを意味します。
問題は、スクリプトがまったく実行されないことです。
もしそうなら、問題は正確に何ですか?なぜ実行しないのですか?
答え1
あなたのアイテムに対応するcronフィールドの意味は次のとおりです。
minute: 0
hour: 5
day of month: *
month: *
day of week: 1
command: /home/me/projects/execute-backup-from-container.sh
英語に翻訳すると次のようになります。月曜日の朝午前5時(毎月何日でも)。
実行したい場合:
毎日午前5時
次に、5番目のフィールドを次のように作成したいと思います*
。
0 5 * * * /home/me/projects/execute-backup-from-container.sh
答え2
ファイルが実行可能に設定されていることを確認しましたか?以下は、スクリプトを実行可能としてマークする例です。
$ ls -l test.sh
-rw-r--r-- 1 ahill ahill 0 Mar 23 19:30 test.sh
$ chmod +x test.sh
$ ls -l test.sh
-rwxr-xr-x 1 ahill ahill 0 Mar 23 19:30 test.sh
次に確認しなければならないのは環境だ。デフォルトでは、クローン操作は環境を継承しません。 「修正」はここで説明される。
既存の環境変数を使用してcronコマンドを実行するには?
環境が重要な理由の1つは、cronがbashを見つけることができないかもしれないということです!望むより: https://www.digitalocean.com/community/questions/why-is-cron-not-running-my-sh-script
それでも理解できない場合は、テストしてみましょう。クローンの操作を次に変更します。
0 5 * * * /home/me/projects/execute-backup-from-container.sh
到着する:
0 5 * * * /home/me/projects/execute-backup-from-container.sh >> ~/script_errors.log 2>&1
何が起こるか:次にcronがジョブを開始すると、結果のエラーメッセージがscript_errors.logテキストファイルにダンプされます。 (script_errors.logファイルのパスを適切と思われるパスに変更します。ただし、ファイルには必須ではありませんが、パスが存在することを確認してください。)
また、OPで実際の問題になる可能性がある「コンテナ」という単語を発見しました。スクリプトがDockerコンテナ内にある場合は、次の解決策があります。
https://www.ekito.fr/people/run-a-cron-job-with-docker/
答え3
すべての回答を考慮した後、最後の質問は最後の行にあります。
docker cp "$CONTAINER:/$FILE" backup-data/
最後の行は
docker cp "$CONTAINER:/$FILE" docker-projects/mysql/backup-data/
ご支援ありがとうございます。