man 5 crontab
je docela jasné, jak používat crontab ke spuštění skriptu při bootování:
These special time specification "nicknames" are supported, which replace the 5 initial time and date
fields, and are prefixed by the `@` character:
@reboot : Run once after reboot.
S radostí jsem tedy přidal jeden řádek do svého crontab (pod svým uživatelským účtem, nikoli root):
@reboot /home/me/myscript.sh
Ale z nějakého důvodu by se myscript.sh nespustil při restartu počítače.
(běží dobře, když ho vyvolám z příkazového řádku, takže to není problém s oprávněními)
Co mi chybí?
Aktualizujte odpověď na otázky @Anthon:
- Verze Oracle-linux:5.8 (uname:2.6.32-300.39.2.el5uek #1 SMP)
- Verze Cron:vixie-cron-4.1-81.el5.x86_64
- Ano,
/home
je připojený oddíl. Vypadá to, že tohle je ten problém. Jak to mohu obejít? - Aktuálně
myscript.sh
pouze odešle textovou zprávu do souboru v/home/me
.
Přijatá odpověď:
Toto může být trochu matoucí téma, protože existují různé implementace cronu. Také se vyskytlo několik chyb, které tuto funkci narušily, a existují také případy použití, kdy to prostě nebude fungovat, konkrétně pokud provedete vypnutí/boot vs. restart.
Chyby
datový bod č. 1
Jedna taková chyba v Debianu je popsána zde s názvem:cron:Úlohy @reboot se nespouštějí. Zdá se, že se to dostalo i do Ubuntu, což nemohu přímo potvrdit.
datový bod #2
Zdá se, že důkazy o chybě v Ubuntu jsou potvrzeny zde v těchto SO Q&A s názvem:@reboot cronjob not executing.
úryvek
komentář číslo 1:... 3) vaše verze crond možná nepodporuje @reboot používáte crond vix? … zobrazit výsledky uživatele crontab -l -u
komentář č. 2:… Možná by bylo dobré to nastavit jako init skript místo spoléhání se na konkrétní verzi @reboot cronu.
komentář č. 3:… @MarkRoberts odstranil restart a upravil 1 * * * * , na */1 * * * * , problém je vyřešen! Kam mám poslat zástupce Marka? Děkuji!
Přijatá odpověď v těchto otázkách a odpovědích měla také tento komentář:
Zdá se mi, že Lubuntu nepodporuje syntaxi @Reboot Cron.
Další důkazy
datový bod #3
Jako další důkaz bylo toto vlákno, že se někdo pokoušel o stejnou věc a byl frustrovaný, že to nefunguje. Jmenuje se:Vlákno:Cron – úlohy @reboot nefungují.
úryvek
Re:Cron – úlohy @reboot nefungují
Citace Původně odeslal ceallred View Post
Tohle mě zabíjí… Vyzkoušel jsem obalový skript. Ruční spuštění vygeneruje soubor protokolu... restartování a úloha se nespustí ani nevytvoří soubor protokolu.Syslog ukazuje, že CRON spustil úlohu... ale opět žádný výstup a proces neběží.
Jul 15 20:07:45 RavenWing cron[1026]:(CRON) INFO (Spouštění úloh @reboot)
15. července 20:07:45 RavenWing CRON[1053]:(ceallred) CMD (/home/ceallred/Scripts/run_spideroak.sh> /home/ceallred/Scripts/SpiderOak.log 2>&1 &)Zdá se, že cron nemá rád příkaz @reboot…. Nějaké další nápady?
Dobře... Částečně vyřešeno. Tento problém označím jako vyřešený a založím nové vlákno s novým problémem….
Myslím, že odpovědí bylo, že můj zašifrovaný domovský adresář nebyl připojen, když se CRON pokoušel spustit skript (uložený v /home/username/scripts). Přesunuto do /usr/scripts a úloha běží podle očekávání.
Nyní se tedy zdá, že jde o problém s pavoukem. Proces se spustí, ale v době, kdy je proces spouštění dokončen, je pryč. Hádám havárii z nějakého důvodu... Nové vlákno se na to ptát.
Děkujeme za veškerou pomoc!
Jakmile výše uvedený uživatel zjistil svůj problém, mohl získat @reboot
zpracování záznamu uživatele crontab.
Nejsem si úplně jistý, jaká verze cronu se na Ubuntu používá, ale zdá se, že to naznačuje, že uživatel může použít @reboot
také, nebo že chyba byla opravena v určitém okamžiku v následujících verzích cronu.
datový bod #4
Testoval jsem na CentOS 6 následující a fungovalo to.
Příklad
$ crontab -l
@reboot echo "hi" > /home/sam/reboot.txt 2>&1
Poté jsem restartoval systém.
$ sudo reboot
Po restartu.
$ cat reboot.txt
hi
Také pryč
- Zdá se, že tato funkce je podporována pro systémové i uživatelské položky crontab.
- Musíte se ujistit, že je podporován/funguje ve vaší konkrétní distribuci a/nebo verzi balíčku cron.
Další informace o tom, jak skutečný mechanismus funguje pro @reboot
Narazil jsem na tento blogový příspěvek, který pojednává o vnitřnostech. Jmenuje se:@reboot – vysvětluje jednoduchou magii cron.
Ladění crond
Můžete zvýšit výřečnost crond
přidáním následujícího do tohoto konfiguračního souboru v distribucích založených na RHEL/CentOS/Fedora.
$ more crond
# Settings for the CRON daemon.
# CRONDARGS= : any extra command-line startup arguments for crond
CRONDARGS="-L 2"
Platné úrovně jsou 0, 1 nebo 2. Chcete-li tento soubor vrátit zpět na výchozí úroveň protokolování, jednoduše odstraňte "-L 2"
až dokončíte ladění situace.