GNU/Linux >> Znalost Linux >  >> Linux

Crontab's @reboot funguje pouze pro root?

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:

  1. Verze Oracle-linux:5.8 (uname:2.6.32-300.39.2.el5uek #1 SMP)
  2. Verze Cron:vixie-cron-4.1-81.el5.x86_64
  3. Ano, /home je připojený oddíl. Vypadá to, že tohle je ten problém. Jak to mohu obejít?
  4. 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.

Související:Proč nelze najít read /run/user/1000/gvfs, i když běží jako root?

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č

  1. Zdá se, že tato funkce je podporována pro systémové i uživatelské položky crontab.
  2. 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.


Linux
  1. PYTHONPATH nefunguje pro sudo na GNU/Linux (funguje pro root)

  2. Jaké je výchozí kořenové heslo pro MySQL 5.7

  3. @reboot nefunguje v CRON

  1. Linuxové tipy pro používání cronu k plánování úloh

  2. Použití at pro jednorázové úlohy cron v Linuxu

  3. LibreOffice může otevřít pouze uživatel root

  1. CentOS / RHEL :Jak zakázat ssh pro uživatele bez oprávnění root (povolení ssh pouze pro uživatele root)

  2. Linux najít/vyhledat POUZE kořenový oddíl?

  3. Kde je .bashrc pro root?