web-dev-qa-db-ja.com

bashスクリプトをcronジョブに追加する方法は?

backup.shというスクリプトがあります:

#!/bin/bash
Sudo Zip -r /home/jazuly/backup.Zip /var/lib/automysqlbackup/
cd /home/jazuly/backupscript/cp2google/
php cp2google.php /home/jazuly/backup.Zip
cd ~
rm -f /home/jazuly/backup.Zip

私はそれを実行可能にしました:

Sudo chmod +x backup.sh

次に、cronwith crontab -eを編集しようとしました。

私は追加します:

# m h dom mon dow command
0 0 * * * /home/jazuly/backup.sh

しかし、cronがbackup.Zipをメールに送信すると、それをダウンロードして開き、ファイルが破損しています。

スクリプトを手動で実行する場合:

$ Sudo chmod +x backup.sh 
$ ./backup.sh

Zipファイルを開くことができます。

4
Jazuly

修正方法の手順は次のとおりです。

  1. var/lib/automysqlbackupの権限と所有者を777jazuly.jazulyに変更します。
  2. すべてのフォルダーとファイルをbackupscript/cp2google/からhome/jazulyに移動します。
  3. すべてのステートメントにwaitを使用します。
  4. 私の最終的なコード:

    #!/bin/bash
    Zip -r backup.Zip /var/lib/automysqlbackup/
    wait
    php cp2google.php backup.Zip
    wait
    rm -f backup.Zip
    

    そして私のcron

    0 0 * * * /home/jazuly/backup.sh
    

    毎日午前0時をバックアップします。

    .shファイルが実行したいものと同じパスにある場合、フルパスを記述する必要はないと思います。

1
Jazuly

Cron実行スクリプトではフルパスを使用する必要があります。したがって、cd ~を実行せず、代わりにcd /home/jazulyを指定してください

さらにデバッグするために、/home/jazuly/backup.sh 1> /home/jazuly/log.txt 2> /home/jazuly/err.txtを使用して、cronスクリプトの出力をファイルにリダイレクトすることもできます。

したがって、コマンド全体:

# m h dom mon dow command
0 0 * * * /bin/bash /home/jazuly/backup.sh 1> /home/jazuly/log.txt 2> /home/jazuly/err.txt
3
seanlano

フルパスを使用してみてください

#!/bin/bash
/usr/bin/Zip -r /home/jazuly/backup.Zip /var/lib/automysqlbackup/
/usr/bin/php /home/jazuly/backupscript/cp2google/cp2google.php /home/jazuly/backup.Zip
rm -f /home/jazuly/backup.Zip

/bin/bashをcronに追加します

# m h dom mon dow command
0 0 * * * /bin/bash /home/jazuly/backup.sh

ファイルbackup.Zipbackupdatabaseterbaru-c771cd4f4fcf.p12の権限を確認します

1
zombic