Portál AbcLinuxu, 6. května 2025 22:59

Dotaz: zápis do crontabu přes přikaz

11.5.2011 18:46 Pepa
zápis do crontabu přes přikaz
Přečteno: 612×
Odpovědět | Admin
Chtěl bych se zeptat, který cron editovat v připadě, kdy chci udělat něco ve smyslu "15 20 * * * sh script" > crontab To, že to můžu u nanovat mi nepomůže, chtěl bych zjistit, jak to takhle zapsat přes příkaz.Díky
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

11.5.2011 18:49 Pepa
Rozbalit Rozbalit vše Re: zápis do crontabu přes přikaz
Odpovědět | | Sbalit | Link | Blokovat | Admin
stím ještě souvisí input, jak to ošetřit pro uživatele, který by mohl zadat něco ve stylu, zadajte minuty: , pak zadejte hodinu:

Zkoušel jsem to přes
if [ -z $(echo $char | sed -e 's/[0-9]//g')
Má někdo už nějaké vymyšlené řešení?
Fuky avatar 13.5.2011 07:28 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: zápis do crontabu přes přikaz
Příloha:

Pohodlnější je to vyřešit v Pythonu.

$ vim input_cron_example.py
#!/usr/bin/python2.5
# -*- coding: utf-8 -*-

items = []
items.append({"name": "Hour", "min": 0, "max": 23})
items.append({"name": "Minute", "min": 0, "max": 59})

msg = ""
values = {}
for item in items:
    while (True):
        try:
            value = raw_input("%s (must be <%i; %i>): " % (item["name"], item["min"], item["max"]))
            value = int(value)
            if (value >= item["min"]) and (value <= item["max"]):
                values.update({item["name"]: value})
                break
        except:
            continue

print "%(Hour)s %(Minute)s * * * command" % values
$ chmod +x input_cron_example.py
$ ./input_cron_example.py
Hour (must be <0; 23>): neplatna hodnota
Hour (must be <0; 23>): 26
Hour (must be <0; 23>): 23
Minute (must be <0; 59>): -1
Minute (must be <0; 59>): 55
23 55 * * * command

BTW: Nezapomeň, že uživatel má větší možnosti, než jen zadat jedno číslo:

minute         0-59
hour           0-23
day of month   1-31
month          1-12 (or names, see below)
day of week    0-7 (0 or 7 is Sun, or use names)

*/2
0-23/2
0-4,8-12
1,2,5,9
8-11

@reboot        Run once, at startup.
@yearly        Run once a year, "0 0 1 1 *".
@annually      (same as @yearly)
@monthly       Run once a month, "0 0 1 * *".
@weekly        Run once a week, "0 0 * * 0".
@daily         Run once a day, "0 0 * * *".
@midnight      (same as @daily)
@hourly        Run once an hour, "0 * * * *".

py.cz
"Ponořme se do Python(u) 3", Mark Pilgrim

13.5.2011 12:32 Ash | skóre: 53
Rozbalit Rozbalit vše Re: zápis do crontabu přes přikaz
Zjednodušeně (bash):
read -p Hodina value

if [[ ! "$value" =~ ^[[:digit:]]+$ ]]; then
	echo "Value \"$value\" is not a digit."
fi

if [[ "$value" -lt "0" || "$value" -gt "23" ]]; then
	echo "Value \"$value\" out of range [0..23]."
fi
13.5.2011 13:14 pepa
Rozbalit Rozbalit vše Re: zápis do crontabu přes přikaz
if [[ "$value" -gt "0" || "$value" -lt "23" ] -o "$value" == "*" ]; then
	echo "0-23 nebo *"
fi
Super, tohle by mělo stačit,jen zprovoznit tu podmínku ...
11.5.2011 22:07 Ash | skóre: 53
Rozbalit Rozbalit vše Re: zápis do crontabu přes přikaz
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak minimálně by šlo něco jako (echo "15 20 * * * sh script"; crontab -l) | crontab -, pokud ne něco lepšího.
12.5.2011 07:04 kip | skóre: 8 | blog: kip | Nový Jičín
Rozbalit Rozbalit vše Re: zápis do crontabu přes přikaz
Odpovědět | | Sbalit | Link | Blokovat | Admin
crontab -e
Fuky avatar 12.5.2011 09:17 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: zápis do crontabu přes přikaz
Odpovědět | | Sbalit | Link | Blokovat | Admin
/etc/crontab.d
-- RÁMO: psí tábor , ETriatlon: Výuka plavání
Marián Kyral avatar 12.5.2011 09:36 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
Rozbalit Rozbalit vše Re: zápis do crontabu přes přikaz
Odpovědět | | Sbalit | Link | Blokovat | Admin
Dá se to udělat takto:
crontab -l |grep -v "sh script" >/tmp/crontab.$$  #(1)
echo "15 20 * * * sh script" >>/tmp/crontab.$$    #(2)
crontab /tmp/crontab.$$                           #(3)
rm /tmp/crontab.$$                                #(4)
(1) - vypíše crontab do souboru a při té příležitosti se pro jistotu vyloučí daný script aby tam pak nebyl dvakrát.
(2) - přidá řádek do souboru
(3) - zapíše upravený soubor do crontabu
(4) - úklid (ale možná je lepší si nechat zálohu)

Dá se to udělat jedním příkazem. A je dobré přidat tam nějaké kontroly na selhání příkazu. Pokud ti dojde místo na disku, tak se může stát, že si ten crontab kompletně zrušíš.
14.5.2011 02:45 Xóža Hňabaj | skóre: 15 | blog: popcorp | Brno
Rozbalit Rozbalit vše Re: zápis do crontabu přes přikaz
Odpovědět | | Sbalit | Link | Blokovat | Admin
EDITOR="echo '15 20 * * * sh script' > " crontab -e
Jednaokový biu
14.5.2011 12:23 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: zápis do crontabu přes přikaz
Na to bych moc nespoléhal. Pro nějaký konkrétní crontab snad ano, ale obecně se nemůžete spolehnout, že crontab ten "editor" bude spouštět přes shell.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.