Estaba haciendo un trabajo cron para guardar mi mundo de Minecraft desde mi RAM cada 5 minutos.
Probé el script y parece estar funcionando.
Así es como se ve el script:
#!/bin/sh
VOLATILE="/home/jonathan/Games/Minecraft/Server/world/"
PERMANENT="/home/jonathan/Games/Minecraft/Server/world_storage/"
rsync -r -t -v "$VOLATILE" "$PERMANENT"
Entonces fui a agregar un trabajo cron para ejecutar el script cada 5 minutos, y parece que no lo está ejecutando.
Este es el script que usé:
*/5 * * * * bash /home/jonathan/Games/Minecraft/Server/Backup.sh
¿Alguien puede ayudarme por favor?
Respuesta aceptada:
No especificó cómo agregó su cronjob. Esto hace una gran diferencia:si ha usado crontab -e
dentro de su propia cuenta, los scripts se ejecutan con su usuario (y, por lo tanto, la entrada crontab tiene un campo menos:el usuario para ejecutarlo, como se conoce). Si simplemente copió su fragmento anterior a /etc/cron.d
, fallaría porque no especificó un usuario (o más bien porque no encuentra ningún usuario llamado "bash"). Por lo tanto, debe seguir los siguientes pasos:
- actualice su pregunta con información sobre cómo agregó el trabajo cron
- verifique los registros del sistema (
/var/log/syslog
; podrían señalar posibles errores) - añade algo de salida de depuración a tu
Backup.sh
script para ver si se ha iniciado
El tercer punto se puede lograr de varias maneras:
- agregue un
>>/tmp/testlog.log
al final de su entrada crontab (para redirigir la salida a un archivo que puede investigar; además, un2>&1
incluiría la salida de la consola de errores) - añada algunas líneas a su propia secuencia de comandos, como p.
echo "Backup.sh started">/tmp/testlog.log
Además:como pretende que su script se ejecute usando bash
, no debes decirle que use /bin/sh
(lo que haría que usara dash
en una instalación predeterminada de Ubuntu), sino /bin/bash
. Luego hágalo ejecutable e incluso puede omitir el "bash" de su entrada crontab.
Actualización:
De acuerdo con su comentario sobre mi respuesta, usó crontab -e
para crear el trabajo, y de acuerdo con los registros de su sistema, se ejecuta, pero la definición es bastante
*/5 * * * * bash /home/jonathan/Games/Minecraft/Server/Backup.sh &>/dev/null
Esto redirige toda la salida al almacenamiento más grande de su sistema, el "agujero negro":/dev/null
come todo (pero nunca devuelve nada). Redireccionar STDOUT así como STDERR de esta manera le roba cualquier informe de error, por lo que nunca sabrá si ocurrieron, y mucho menos los detalles. Para realizar pruebas, debe omitir &>/dev/null
parte completamente. Incluso si funciona, solo debe suprimir la salida innecesaria; de lo contrario, nunca se sabe cuándo algo sale mal. Por lo tanto, mejor omita al menos el ampersand, para que Cron pueda informar cualquier error que ocurra.
Además:una vez que se redirige la salida (como en su caso a /dev/null
), agregar otra redirección al final no dará ningún resultado, ya que todo ya se ha ido. Así que tengo que ajustar el consejo anterior de "agregar... al final de tu entrada de crontab" a "reemplazar eso en tu entrada de crontab" 😉