Pourriez-vous me conseiller quoi écrire crontabpour qu'il exécute un travail (pour les tests que j'utiliserai /usr/bin/chromium-browser) toutes les 15 secondes?
Vous ne pouvez pas descendre en dessous d'une granularité d'une minute avec cron. Ce que vous pouvez faire, c'est, chaque minute, exécuter un script qui exécute votre travail, attend 15 secondes et se répète. La ligne crontab suivante démarre some_jobtoutes les 15 secondes.
* * * * * for i in 0 1 2; do some_job & sleep 15; done; some_job
Ce script suppose que le travail ne prendra jamais plus de 15 secondes. Le script légèrement plus complexe suivant prend soin de ne pas exécuter l'instance suivante si celle-ci prenait trop de temps à s'exécuter. Il repose sur la prise en datecharge du %sformat (par exemple GNU ou Busybox, donc tout ira bien sous Linux). Si vous le mettez directement dans une crontab, notez que les %caractères doivent être écrits comme \%dans une ligne crontab.
Je noterai cependant que si vous devez exécuter un travail aussi souvent que toutes les 15 secondes, cron est probablement la mauvaise approche. Bien que les unités soient bonnes avec des processus de courte durée, les frais généraux liés au lancement d'un programme toutes les 15 secondes peuvent être non négligeables (selon la demande du programme). Vous ne pouvez pas exécuter votre application tout le temps et lui faire exécuter sa tâche toutes les 15 secondes?
pourrait également être: pour i in 1 2 3 4 ; do some_job & sleep 15; done(le dernier sommeil n'affectera pas la prochaine exécution), mais la façon dont vous le faites est probablement meilleure pour le timing du courrier cronjob sortant (envoyé juste après le dernier some_job, au lieu de 15s plus tard dans ma variante)
Pour éviter que le travail n'interfère avec lui-même, nous limitons son temps d'exécution à 15 secondes via GNU coreutils ' timeoutpour chaque travail. Notez cependant que si le travail ne se termine pas correctement immédiatement au bout de 15 secondes, vous pouvez toujours vous retrouver avec des problèmes. Consultez le manuel de commande pour plus de détails sur la façon de résoudre ce problème en cas de problème. Notez également que si la commande prend plus de 15 secondes et que le délai d'attente la tue, vous obtiendrez un état de sortie non nul qui déclenchera un e-mail cronjob.
Agréable. Si un processus est long, le processus suivant se terminera probablement également sur un noyau différent. Je ne sais pas si vous pouvez définir délibérément l'affinité de base pour les tâches Cron, mais cela pourrait rendre cette approche encore meilleure.
Tim
@Tim bon point. Je l'ai abordé un peu dans un montage.
Otheus
2
En bref, le cron n'est pas si granuleux avec le temps. La période la plus courte que vous obtiendrez est 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
Cependant, vous pourriez écrire un script qui s'exécuterait toutes les 15 secondes ...
J'ai une ligne * * * * * /usr/bin/chromium-browserdans crontab. Selon le manuel, il devrait fonctionner toutes les minutes mais rien ne fonctionne.
xralf
Est-il difficile d'écrire un tel script? Dois-je poser une autre question ou pourrait-elle être écrite ici?
xralf
Les tâches Cron n'ont pas de terminal, je m'attends donc à ce que le navigateur échoue. Il peut le faire en silence.
BillThor
Mes journaux cron sont situés dans / var / log / cron pour les dérivés de redhat, ie. fedora, centos, etc. Cela peut aussi vous aider à décrire exactement ce que vous essayez de faire pour que les gens aient une image complète de ce qui se passe.
rfelsburg
1
Dans votre crontab:
* * * * /usr/bin/chromium-browser_starter
Puis dans /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
Réponses:
Vous ne pouvez pas descendre en dessous d'une granularité d'une minute avec cron. Ce que vous pouvez faire, c'est, chaque minute, exécuter un script qui exécute votre travail, attend 15 secondes et se répète. La ligne crontab suivante démarre
some_job
toutes les 15 secondes.Ce script suppose que le travail ne prendra jamais plus de 15 secondes. Le script légèrement plus complexe suivant prend soin de ne pas exécuter l'instance suivante si celle-ci prenait trop de temps à s'exécuter. Il repose sur la prise en
date
charge du%s
format (par exemple GNU ou Busybox, donc tout ira bien sous Linux). Si vous le mettez directement dans une crontab, notez que les%
caractères doivent être écrits comme\%
dans une ligne crontab.Je noterai cependant que si vous devez exécuter un travail aussi souvent que toutes les 15 secondes, cron est probablement la mauvaise approche. Bien que les unités soient bonnes avec des processus de courte durée, les frais généraux liés au lancement d'un programme toutes les 15 secondes peuvent être non négligeables (selon la demande du programme). Vous ne pouvez pas exécuter votre application tout le temps et lui faire exécuter sa tâche toutes les 15 secondes?
la source
1 2 3 4 ; do some_job & sleep 15; done
(le dernier sommeil n'affectera pas la prochaine exécution), mais la façon dont vous le faites est probablement meilleure pour le timing du courrier cronjob sortant (envoyé juste après le dernier some_job, au lieu de 15s plus tard dans ma variante)Approche différente des autres: exécutez 4 cronjobs, chacun décalé de 15 secondes:
Pour éviter que le travail n'interfère avec lui-même, nous limitons son temps d'exécution à 15 secondes via GNU coreutils '
timeout
pour chaque travail. Notez cependant que si le travail ne se termine pas correctement immédiatement au bout de 15 secondes, vous pouvez toujours vous retrouver avec des problèmes. Consultez le manuel de commande pour plus de détails sur la façon de résoudre ce problème en cas de problème. Notez également que si la commande prend plus de 15 secondes et que le délai d'attente la tue, vous obtiendrez un état de sortie non nul qui déclenchera un e-mail cronjob.la source
En bref, le cron n'est pas si granuleux avec le temps. La période la plus courte que vous obtiendrez est de 1 min.
Cependant, vous pourriez écrire un script qui s'exécuterait toutes les 15 secondes ...
la source
* * * * * /usr/bin/chromium-browser
dans crontab. Selon le manuel, il devrait fonctionner toutes les minutes mais rien ne fonctionne.Dans votre crontab:
Puis dans
/usr/bin/chromium-browser_starter
:la source
ps aux | grep chrom
après une minute, je ne vois pas le navigateur Chrome fonctionner.sleep
.