web-dev-qa-db-ja.com

私はshスクリプトを持っています。 crontabを使用して実行するには?

私は次のファイルを持っています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
Cristian

エントリに対応するcronフィールドは次のことを意味します。

minute:       0 
hour:         5 
day of month: * 
month:        * 
day of week:  1 
command:      /home/me/projects/execute-backup-from-container.sh

これは、英語で次のように変換されます。

実行したい場合:

毎日午前5時

次に、その5番目のフィールドを*にしたいとします。

0 5 * * * /home/me/projects/execute-backup-from-container.sh
5
Jeff Schaller

ファイルが実行可能に設定されていることを確認しましたか?スクリプトを実行可能ファイルとしてマークする例を次に示します。

$ 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ジョブは、デフォルトでは環境を継承しません。 「修正」については、ここで説明します。
既存の環境変数を使用してcronコマンドを実行するにはどうすればよいですか?

環境が重要な理由の1つは、cronがbashさえ見つけられない可能性があることです。参照: https://www.digitalocean.com/community/questions/why-is-cron-not-running-my-sh-script

それでもわからない場合は、テストを行います。cronジョブを次のように変更します。

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/

1
Art Hill

すべての答えを考慮した後、最後の問題は最後の行にありました:

docker cp "$CONTAINER:/$FILE" backup-data/  

最後の行は

docker cp "$CONTAINER:/$FILE" docker-projects/mysql/backup-data/  

皆様のご支援、誠にありがとうございます。

0
Cristian