1 votos

Cronjob en macOS no funciona si se establece con un script externo de bash

Estoy tratando de crear un nuevo cronjob que ejecute un script cada vez que se inicia. Si hago cronjob -e y luego inserto por ejemplo @reboot bash /Users/user/script.sh y luego guardo todo, está todo bien:

crontab: no crontab for user - using an empty one
crontab: installing new crontab

Si reinicio mi Mac, el script se ejecuta correctamente. Lo que estoy intentando hacer es crear un cronjob con un script bash como este:

var=$(crontab -l 2> /dev/null);
value=$(echo $?);
script='@reboot bash /Users/user/myscript.sh';

if [[ $value = 0 ]];
then
    printf "$var \n$script" |crontab -;
else
    printf "$script" | crontab -;
fi

Parece funcionar porque si hago crontab -l encuentro mi script @reboot bash /Users/user/myscript.sh pero después de reiniciar la Mac, el script no se ejecuta. ¿Alguna idea de por qué no funciona y cómo puedo hacerlo funcionar?

1voto

No es necesario verificar si actualmente hay un crontab instalado o no. Simplemente ejecuta

(crontab -l 2>/dev/null; echo '@reboot bash /Users/user/myscript.sh') | crontab -

para agregar la línea @reboot a tu crontab (o crear uno nuevo).

0 votos

Gracias, esto es más fácil. Intenté antes un método bastante similar pero sobrescribió el otro crontab

0voto

Virgula Puntos 3

Resuelto. Crontab necesita \n al final de la última línea para ejecutar comandos:

var=$(crontab -l 2> /dev/null);
value=$(echo $?);
script='@reboot bash /Users/angelorosa/script.sh';

if [[ $value = 0 ]];
then
    printf "$var\n$script\n" | crontab;
else
    printf "$script \n" | crontab;
fi

0 votos

Incrustar cadenas arbitrarias (como los antiguos contenidos de crontab) en una cadena de control printf no es seguro. En su lugar, utiliza algo como printf '%s\n' "$var" "$script".

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X