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.
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?
también podría ser: para i in 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)
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.
Agradable. Si un proceso dura mucho, probablemente el siguiente proceso también termine en un núcleo diferente. No estoy seguro de si puede establecer deliberadamente una afinidad central para los trabajos de Cron, pero eso podría mejorar aún más este enfoque.
Tim
@Tim buen punto. Abordé eso un poco en una edición.
Oteo
2
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 ...
Tengo una línea * * * * * /usr/bin/chromium-browseren crontab. Según el manual, debe ejecutarse cada minuto, pero no se ejecuta nada.
xralf
¿Es difícil escribir un guión así? ¿Debo hacer otra pregunta o podría escribirse aquí?
xralf
Los trabajos de Cron no tienen una terminal, por lo que esperaría que el navegador fallara. Puede hacerlo en silencio.
BillThor
Mis registros cron se encuentran en / var / log / cron para derivados de redhat, es decir. fedora, centos, etc. También puede ayudarlo describir exactamente lo que está tratando de hacer para que las personas tengan una idea completa de lo que está sucediendo.
rfelsburg
1
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
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_job
cada 15 segundos.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
date
compatibilidad con el%s
formato (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.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?
fuente
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:
Para evitar que el trabajo interfiera consigo mismo, limitamos su tiempo de ejecución a 15 segundos a través de GNU coreutils '
timeout
para 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.fuente
En resumen, cron no es tan granular con el tiempo. El período más corto que obtendrá es de 1 min.
Sin embargo, podría escribir un script que se ejecute cada 15 segundos ...
fuente
* * * * * /usr/bin/chromium-browser
en crontab. Según el manual, debe ejecutarse cada minuto, pero no se ejecuta nada.En tu crontab:
Luego en
/usr/bin/chromium-browser_starter
:fuente
ps aux | grep chrom
después de un minuto, no puedo ver el navegador Chrome.sleep
.