2008-10-29 3 views

Antwort

10

Gibt es einen guten Grund, warum Sie nicht 1 Stunde oder 2 Stunden verwenden können? Es wäre sicherlich einfacher.

ich dies persönlich nicht versucht haben, aber Sie können einige Informationen hier auf immer cron finden alle 90 Minuten laufen zu lassen: http://keithdevens.com/weblog/archive/2004/May/05/cron

Einen excert aus dem obigen Link:

0 0,3,6,9,12,15,18,21 * * * <commands> 
30 1,4,7,10,13,16,19,22 * * * <commands> 
+1

Welche Anforderung? Der erste Satz stellt die Notwendigkeit von 1,5 Stunden in Frage, der zweite stellt einen Blogeintrag mit Informationen darüber bereit, wie es alle 1,5 Stunden gemacht wird. – vfilby

+1

Upvoted, weil der Blogpost die Frage richtig beantwortet. –

+0

Es hat nicht eindeutig darauf hingewiesen, als ich es abgelehnt habe. Es wurde seither bearbeitet, um deutlich zu machen, dass die Verbindung zu einer möglichen Lösung für die 90-Minuten-Frage führt. – Alnitak

32

das nicht möglich ist mit einem einzigen Ausdruck in normalen cron.

Das Beste, was Sie ohne Änderung der Code tun können, ist:

0 0,3,6,9,12,15,18,21 * * * [cmd]

30 1,4,7,10,13,16,19,22 * * * [cmd]

Diese könnte komprimierbar sein, abhängig von der Version von cron Sie haben:

0 */3 * * * [cmd]

30 1-23/3 * * * [cmd]

4

Zwei Linien in der crontab. Entlang der Linien:

0 0,3,6,9,12,15,18,21 * * * /usr/bin/foo 
30 1,4,7,10,13,16,19,22 * * * /usr/bin/foo 
1

Sie könnten es mit zwei crontab Einträgen tun.Jeder läuft alle drei Stunden und werden von 90 Minuten so etwas wie dieses Offset:

0 0,3,6,9,12,15,18,21 * * *

30 1,4,7, 10,13,16,19,22 * * *

0

Sie könnten auch fcron verwenden, die auch komplexere Zeitangaben wie akzeptiert:

@ 01h30 my_cmd 
1
#! /bin/sh 

# Minute Cron 
# Usage: cron-min start 
# Copyright 2014 by Marc Perkel 
# docs at http://wiki.junkemailfilter.com/index.php/How_to_run_a_Linux_script_every_few_seconds_under_cron" 
# Free to use with attribution 

# Run this script under Cron once a minute 

basedir=/etc/cron-min 

if [ $# -gt 0 ] 
then 
    echo 
    echo "cron-min by Marc Perkel" 
    echo 
    echo "This program is used to run all programs in a directory in parallel every X minutes." 
    echo 
    echo "Usage: cron-min" 
    echo 
    echo "The scheduling is done by creating directories with the number of minutes as part of the" 
    echo "directory name. The minutes do not have to evenly divide into 60 or be less than 60." 
    echo 
    echo "Examples:" 
    echo " /etc/cron-min/1  # Executes everything in that directory every 1 minute" 
    echo " /etc/cron-min/5  # Executes everything in that directory every 5 minutes" 
    echo " /etc/cron-min/13  # Executes everything in that directory every 13 minutes" 
    echo " /etc/cron-min/90  # Executes everything in that directory every 90 minutes" 
    echo 
    exit 
fi 

for dir in $basedir/* ; do 
    minutes=${dir##*/} 
    if [ $((($(date +%s)/60) % $minutes)) -eq 0 ] 
    then 
     for program in $basedir/$minutes/* ; do 
    if [ -x $program ] 
    then 
     $program &> /dev/null & 
    fi 
     done 
    fi 
done 
-2

hinzugefügt folgendes meine crontab und arbeitet

15 */1 * * * root /usr/bin/some_script.sh >> /tmp/something.log 
+0

Könnten Sie mehr darüber erfahren, warum dies eine gute Lösung ist? –

1

*/10 * * * * root perl -e 'exit(time()%(90*60)>60)' && command

90 - es ist eine und eine halbe Stunde in Minuten

"> 60" - Ich gebe Fähigkeit cron den Start-Skript während einer Minute

auch zu verzögern Mit Hilfe dieses Hacks können Sie einen beliebigen Zeitraum mit einer Minutenauflösung einstellen

Zum Beispiel starten Sie das Skript alle 71 Minuten

* * * * * root perl -e 'exit(time()%(71*60)>60)' && command

0

Sie eine beliebige Frequenz erreichen können, wenn Sie die Minuten (, Stunden, Tage oder Wochen), da Epoch, fügen Sie eine Bedingung an die Spitze des Skripts, und legen Sie das Skript zählen jede Minute auf dem crontab laufen :

#!/bin/bash 

minutesSinceEpoch=$(($(date +'%s/60'))) 

# every 90 minutes (one and a half hours) 
if [[ $(($minutesSinceEpoch % 90)) -ne 0 ]]; then 
    exit 0 
fi 

date(1) kehrt das aktuelle Datum, wir es als Sekunden seit der Epoche (%s) formatiert und dann tun wir grundlegende Mathematik:

# .---------------------- bash command substitution 
# |.--------------------- bash arithmetic expansion 
# || .------------------- bash command substitution 
# || | .---------------- date command 
# || | | .------------ FORMAT argument 
# || | | |  .----- formula to calculate minutes/hours/days/etc is included into the format string passed to date command 
# || | | |  | 
# ** * * *  * 
    $(($(date +'%s/60'))) 
# * * --------------- 
# | |  | 
# | |  ·----------- date should result in something like "1438390397/60" 
# | ·-------------------- it gets evaluated as an expression. (the maths) 
# ·---------------------- and we can store it 

A Und Sie können diesen Ansatz mit stündlichen, täglichen oder monatlichen Cron-Aufträgen verwenden:

#!/bin/bash 
# We can get the 

minutes=$(($(date +'%s/60'))) 
hours=$(($(date +'%s/60/60'))) 
days=$(($(date +'%s/60/60/24'))) 
weeks=$(($(date +'%s/60/60/24/7'))) 

# or even 

moons=$(($(date +'%s/60/60/24/656'))) 

# passed since Epoch and define a frequency 
# let's say, every 7 hours 

if [[ $(($hours % 7)) -ne 0 ]]; then 
    exit 0 
fi 

# and your actual script starts here 
+1

Hallo stefanmaric, da Sie in der Sache fest zu sein scheinen, fügen Sie die Antwort nur zu einer der Fragen hinzu und kennzeichnen Sie diejenigen, die echte Duplikate sind, als Duplikate der besten Frage/Antwort-Kombination. – bummi

+0

Hi @bummi, ich habe tatsächlich nach der Funktion "Als Duplikat markieren" gesucht. Ich habe es nicht gefunden, also habe ich gepostet. Ich habe seit meinem Kommentar mehr Forschung betrieben und herausgefunden, dass ich nicht genug Reputation habe, um Fragen zu beantworten: http://meta.stackexchange.com/questions/118124/where-on-earth-is-the-mark-duplicate-ui-on -stack-overflow Danke für den Hinweis und es tut mir leid wegen der Spam. – stefanmaric