2009-01-22 6 views

Répondre

74
1-56/5 * * * * /my/script 

Cela devrait fonctionner sur vixiecron, je ne suis pas sûr d'autres implémentations.

+0

La même syntaxe est également acceptée par fcron, qui couvre les deux crons les plus répandus.Je ne crois pas que dcron supporte cela, mais c'est plus rare. – ephemient

+0

cela fonctionne !! Génial .. :) – Mo3z

+0

Comment savoir quelle version de cron est utilisée? –

16

Utilisez votre premier programme:

*/5 * * * * /my/script 

Et ajouter ceci au début de votre script:

sleep 60 

(Oui, c'est une blague)

+1

J'utilise en fait une variation de ceci pour démarrer un processus 1 sec avant minuit. –

+4

Ah, la puissance du sommeil -1 ;-) –

+0

Je déplaçais déjà la souris pour downvoter celui-ci avant de lire la dernière ligne :) – ymihere

-5

plaisanterie de sean.bright a moi pensant ... pourquoi ne pas utiliser ...

* * * * * /my/script 

... et dans le script faire ...

#!/bin/bash 
export WHEN=`date '+%M'` 
echo $WHEN 
export DOIT=`echo "$WHEN % 5" | bc` 
echo $DOIT 
if [ $DOIT != 0 ] ; then 
    echo "ha ha ha" 
fi 
echo "done" 

... une bidouille ... peut-être, mais aussi laid que le crontab ... Je ne sais pas.

+0

Parce que vous exécutez un processus chaque minute que vous savez ne fera rien d'utile. En outre, je pense que votre instruction if est cassée. ;-) –

+0

Correction de l'instruction if. – dacracot

+0

D'un côté, c'est mieux. D'un autre côté, c'est plus de travail pour savoir si vous ne devriez pas faire quelque chose. –

-1

Je créerais un nouveau script "delaystart" qui prend une période de sommeil comme premier paramètre et le script pour exécuter le reste. Je voudrais que le script vérifie la ligne crontab pour la ligne avec le script et ne démarre le script que si la ligne n'est pas commentée. Cela le rend réutilisable, et ps ne signalera pas le script comme étant en cours d'exécution alors que ce n'est pas le cas.

#!/bin/bash 
sleeptime=$1 
sleep ${sleeptime} 
shift 
if (! crontab -l | grep -e '#.+delaystart '${sleeptime} $*) then 
    $* 
fi 
0

Ceci est un sujet assez ancien, mais comme beaucoup de temps s'est écoulé, il y a maintenant quelques autres options. L'un d'entre eux est de ne pas utiliser cron du tout, et d'utiliser les minuteries systemd. L'utilisation de ces vous donne une granularité supérieure à la seconde ainsi que beaucoup d'autres options

Plus d'informations sont disponibles ici https://wiki.archlinux.org/index.php/Systemd/Timers

par exemple pour exécuter une commande adhoc

# systemd-run --on-calendar="*:1/5" /bin/touch /tmp/foo2 
Running timer as unit run-r31335c4878f24f90b02c8ebed319ca60.timer. 
Will run service as unit run-r31335c4878f24f90b02c8ebed319ca60.service. 

# systemctl status run-r31335c4878f24f90b02c8ebed319ca60.timer 
● run-r31335c4878f24f90b02c8ebed319ca60.timer - /bin/touch /tmp/foo2 
    Loaded: loaded 
Transient: yes 
    Drop-In: /run/systemd/system/run-r31335c4878f24f90b02c8ebed319ca60.timer.d 
      └─50-Description.conf, 50-OnCalendar.conf, 50-RemainAfterElapse.conf 
    Active: active (waiting) since Wed 2017-10-25 09:05:13 UTC; 40s ago 

# ls -l /tmp/foo* 
-rw-r--r-- 1 root root 0 Oct 25 09:06 /tmp/foo2 

# sleep 300; ls -l /tmp/foo* 
-rw-r--r-- 1 root root 0 Oct 25 09:11 /tmp/foo2 

# date; ls -l /tmp/foo2 
Wed Oct 25 09:21:42 UTC 2017 
-rw-r--r-- 1 root root 0 Oct 25 09:21 /tmp/foo2 

modifier: ce type de minuteries persistent wont sur le redémarrage, si vous voulez qu'ils s'assurent que vous générez un bon fichier de service, avec la ligne oncalendar appropriée

Questions connexes