¿Podría aconsejarme qué escribir crontabpara que ejecute algún trabajo (para las pruebas que usaré /usr/bin/chromium-browser) cada 15 segundos?
¿Podría aconsejarme qué escribir crontabpara que ejecute algún trabajo (para las pruebas que usaré /usr/bin/chromium-browser) cada 15 segundos?
Respuestas:
No puede ir por debajo de un minuto de granularidad con cron. Lo que puede hacer es, cada minuto, ejecutar un script que ejecute su trabajo, espere 15 segundos y se repita. La siguiente línea crontab comenzará some_jobcada 15 segundos.
* * * * * for i in 0 1 2; do some_job & sleep 15; done; some_job
Este script supone que el trabajo nunca tomará más de 15 segundos. El siguiente script un poco más complejo se encarga de no ejecutar la siguiente instancia si uno tardó demasiado en ejecutarse. Se basa en la datecompatibilidad con el %sformato (por ejemplo, GNU o Busybox, por lo que estará bien en Linux). Si lo coloca directamente en un crontab, tenga en cuenta que los %caracteres deben escribirse como \%en una línea crontab.
end=$(($(date +%s) + 45))
while true; do
some_job &
[ $(date +%s) -ge $end ] && break
sleep 15
wait
done
[ $(date +%s) -ge $(($end + 15)) ] || some_job
Sin embargo, notaré que si necesita ejecutar un trabajo cada 15 segundos, cron es probablemente el enfoque equivocado. Aunque los unices son buenos con procesos de corta duración, la sobrecarga de iniciar un programa cada 15 segundos puede no ser insignificante (dependiendo de lo exigente que sea el programa). ¿No puede ejecutar su aplicación todo el tiempo y hacer que ejecute su tarea cada 15 segundos?
1 2 3 4 ; do some_job & sleep 15; done(la última suspensión no afectará la próxima ejecución), pero la forma en que lo haga probablemente sea mejor para el momento del correo saliente de cronjob (enviado justo después del último some_job, intead de 15 segundos más tarde en mi variante)
Enfoque diferente a los demás: ejecute 4 cronjobs, cada uno escalonado por 15 segundos:
* * * * * sleep 00; timeout 15s some_job
* * * * * sleep 15; timeout 15s some_job
* * * * * sleep 30; timeout 15s some_job
* * * * * sleep 45; timeout 15s some_job
Para evitar que el trabajo interfiera consigo mismo, limitamos su tiempo de ejecución a 15 segundos a través de GNU coreutils ' timeoutpara cada trabajo. Sin embargo, tenga en cuenta que si el trabajo no sale correctamente inmediatamente después de los 15 años, aún puede terminar con problemas. Consulte el manual de comandos para obtener detalles sobre cómo resolver eso si se convierte en un problema. También tenga en cuenta que si el comando tarda más de 15 segundos y el tiempo de espera lo mata, obtendrá un estado de salida distinto de cero que activará un cronjob-email.
En resumen, cron no es tan granular con el tiempo. El período más corto que obtendrá es de 1 min.
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .----- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command to be executed
* * * * /usr/bin/chromium-browser
Sin embargo, podría escribir un script que se ejecute cada 15 segundos ...
* * * * * /usr/bin/chromium-browseren crontab. Según el manual, debe ejecutarse cada minuto, pero no se ejecuta nada.
En tu crontab:
* * * * /usr/bin/chromium-browser_starter
Luego en /usr/bin/chromium-browser_starter:
#!/bin/sh
# chromium-browser_starter
#
# Schedules /usr/bin/chromium-browser to run every 15 seconds for a minute.
# Intended to be called every minute through crond(8).
for ((secs=0; secs<46; secs+=15)); do
(sleep $secs; /usr/bin/chromium-browser "$@") &
done
wait
ps aux | grep chromdespués de un minuto, no puedo ver el navegador Chrome.
sleep.