Je faisais un travail cron pour sauver mon monde Minecraft de mon bélier toutes les 5 minutes. J'ai testé le script et il semble fonctionner.
Voici à quoi ressemble le script:
#!/bin/sh
VOLATILE="/home/jonathan/Games/Minecraft/Server/world/"
PERMANENT="/home/jonathan/Games/Minecraft/Server/world_storage/"
rsync -r -t -v "$VOLATILE" "$PERMANENT"
Alors je suis allé ajouter un travail cron pour exécuter le script toutes les 5 minutes, et il ne semble pas l'exécuter.
C'est le script que j'ai utilisé:
*/5 * * * * bash /home/jonathan/Games/Minecraft/Server/Backup.sh
Quelqu'un peut-il m'aider s'il-vous-plaît?
Vous n'avez pas précisé comment vous avez ajouté votre travail cron. Cela fait une grande différence: si vous avez utilisé crontab -e
dans votre propre compte, les scripts sont exécutés avec votre utilisateur (et donc l'entrée crontab a un champ de moins - l'utilisateur le lance, comme on le sait). . Si vous copiez simplement l'extrait ci-dessus dans /etc/cron.d
, il échouera si vous ne spécifiez pas d'utilisateur (ou plutôt s'il ne trouve aucun utilisateur nommé "bash"). Donc, vous devriez prendre les mesures suivantes:
/var/log/syslog
; ils pourraient indiquer d'éventuelles erreurs)Backup.sh
pour voir s'il est démarréLe troisième point peut être atteint de plusieurs manières:
>>/tmp/testlog.log
à la fin de votre entrée dans la crontab (pour rediriger la sortie dans un fichier que vous pouvez explorer; en outre, un 2>&1
inclurait la sortie de la console d'erreur)echo "Backup.sh started">/tmp/testlog.log
De plus: comme vous voulez que votre script soit exécuté avec bash
, vous ne devriez pas lui dire d'utiliser /bin/sh
(ce qui l'obligerait à utiliser dash
sur une installation Ubuntu par défaut), mais plutôt /bin/bash
. Ensuite, rendez-le exécutable, et vous pouvez même omettre le "bash" de votre entrée dans la crontab.
Mise à jour:
Selon votre commentaire sur ma réponse, vous avez utilisé crontab -e
pour créer le travail. Selon les journaux de votre système, il est exécuté, mais la définition est plutôt
*/5 * * * * bash /home/jonathan/Games/Minecraft/Server/Backup.sh &>/dev/null
Ceci redirige toute la sortie vers le plus grand stockage de votre système, le "trou noir": /dev/null
mange tout (mais ne renvoie jamais rien). En redirigeant STDOUT et STDERR de cette manière, vous ne pourrez plus avoir de rapport d'erreur - vous ne saurez donc jamais qu'ils se sont produits, sans parler des détails. Pour tester, vous devriez omettre complètement la partie &>/dev/null
. Même si cela fonctionne, vous ne devez supprimer que les sorties inutiles. Sinon, vous ne savez jamais quand quelque chose se passe mal. Il vaut donc mieux laisser au moins l'esperluette pour que Cron puisse signaler les erreurs éventuelles.
De plus: une fois que la sortie est redirigée (comme dans votre cas à /dev/null
), ajouter une autre redirection à la fin ne donnera aucun résultat, car tout est déjà parti. Donc, je dois ajuster le conseil ci-dessus de "ajouter ... à la fin de votre entrée crontab" pour "remplacer celui dans votre entrée crontab";)