web-dev-qa-db-fra.com

Comment ajouter un script bash à un travail cron?

J'ai un script appelé 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

Je l'ai rendu exécutable:

Sudo chmod +x backup.sh

Ensuite, j'ai essayé de modifier cronwith crontab -e.

J'ajoute:

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

mais lorsque cron envoie le fichier backup.Zip à mon courrier électronique, je le télécharge et l’ouvre, et le fichier est corrompu.

Si je lance le script manuellement avec:

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

Je peux ouvrir le fichier Zip.

3
Jazuly

Voici les étapes de la façon dont je l'ai corrigé:

  1. Changez l'autorisation et le propriétaire de var/lib/automysqlbackup en 777 & jazuly.jazuly.
  2. Déplacez tous les dossiers et fichiers de backupscript/cp2google/ à home/jazuly.
  3. Utilisez wait pour chaque instruction.
  4. Mon code final:

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

    Et mon cron:

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

    sauvegarder tous les minuit/jours.

    Je ne pense pas qu'il soit nécessaire d'écrire le chemin complet si le fichier .sh se trouve dans le même chemin avec ce que vous voulez exécuter.

1
Jazuly

Vous devrez utiliser le chemin complet dans tout script exécuté par cron. Donc, ne faites pas cd ~, donnez plutôt cd /home/jazuly

Pour plus de débogage, vous pouvez également rediriger la sortie du script cron vers un fichier, avec /home/jazuly/backup.sh 1> /home/jazuly/log.txt 2> /home/jazuly/err.txt

Donc toute la commande:

# 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

Essayez d'utiliser des chemins complets

#!/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

Et ajoutez /bin/bash dans cron

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

Et vérifiez les autorisations pour les fichiers backup.Zip, backupdatabaseterbaru-c771cd4f4fcf.p12

1
zombic