Cron: spuštění každých 5 minut

beer

  • *****
  • 729
    • Zobrazit profil
Cron: spuštění každých 5 minut
« kdy: 25. 01. 2016, 13:40:20 »
ahoj, napsal jsem si script, který by mi měl mojí ipv4 adresu odeslat na github, script funguje ok, chtěl jsem ale, aby se mi spuštěl každý 5 minut, mám v /etc/cron.d/ipv4-public
Kód: [Vybrat]
5 * * * * /mnt/sdcard/slozka/public_ipv4.sh >/dev/null 2>&1

Script se ale nespustí, co dělám špatně? Je potřeba to nějak ještě povolovat? Jedná se Turris s openwrt.

public_ipv4.sh obsahuje:
Kód: [Vybrat]
#!/bin/sh                                                                                     
sleep 20                                                                                     
cd /mnt/sdcard/mnt/sdcard/slozka/                                                           
wget http://ipinfo.io/ip -qO - > /mnt/sdcard/mnt/sdcard/slozka/ipv4.txt                     
date > /mnt/sdcard/slozka/public.ipv4.log                                         
git init                                                                                     
git add *                                                                                     
git commit -m "$(date)"                                                                       
git remote add origin git@github.com:uzivatelskejmeno/slozka.git                   
git push -u origin master                                                                     
exit 0

Když script public_ipv4.sh spustím ručně, tak se správně na githubu objeví moje ip adresa a čas v public.ipv4.log, ale cron se mi ne a ne spouštět.
« Poslední změna: 25. 01. 2016, 13:54:24 od Petr Krčmář »


Re:Cron: spuštění každých 5 minut
« Odpověď #1 kdy: 25. 01. 2016, 13:55:08 »
To není každých pět minut, ale každou pátou minutu v hodině. Tedy když budou hodiny ukazovat *:05. Tu první část je potřeba změnit na */5. Tedy když jsou minuty dělitelné pěti.

beer

  • *****
  • 729
    • Zobrazit profil
Re:Cron: spuštění každých 5 minut
« Odpověď #2 kdy: 25. 01. 2016, 14:13:08 »
To není každých pět minut, ale každou pátou minutu v hodině. Tedy když budou hodiny ukazovat *:05. Tu první část je potřeba změnit na */5. Tedy když jsou minuty dělitelné pěti.

Díky, ovšem bohužel se nespouští ani každoupátou minutu v hodině, ani každých 5 minut. Nyní jsem upravil na */5, což by mělo být tedy každých 5 minut. Umí cron pracovat se symlinky? Ten soubor /etc/cron.d/ipv4-public je symbolickým odkazem souboru /mnt/sdcard/slozka/etc/cron.d/ipv4-public, práva má nastavená na 777.

Rcz

Re:Cron: spuštění každých 5 minut
« Odpověď #3 kdy: 25. 01. 2016, 14:22:25 »
A běží démon cronu?

beer

  • *****
  • 729
    • Zobrazit profil
Re:Cron: spuštění každých 5 minut
« Odpověď #4 kdy: 25. 01. 2016, 14:33:27 »
A běží démon cronu?

Kód: [Vybrat]
ps |grep cron
 4917 root       832 S    cron
11438 root      1528 S    grep cron

Běží, alespoň myslím (4917).


JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Cron: spuštění každých 5 minut
« Odpověď #5 kdy: 25. 01. 2016, 14:45:57 »
A ziral jste do logu (asi syslog), jestli tam cron nenadava?

Re:Cron: spuštění každých 5 minut
« Odpověď #6 kdy: 25. 01. 2016, 14:48:05 »
Nevím, jaký cron je v OpenWRT, ale některým implementacím je potřeba poslat signál, že si mají přenačíst definiční soubory. Také se mi zdá divný formát souboru cronu – máte to pod cron.d, tedy je to globální cron, ale nikde tam nevidím jméno uživatele, pod kterým má ten skript běžet. Další věc je, že skript z cronu se spouští s jiným nastavením proměnných prostředí, např. PATH – ve skriptu máte příkazy wget nebo git uváděné bez cesty, takže je možné, že se nenajdou. Pokud si chcete ověřit, že se skript alespoň spouští, dejte si hned na začátek touch na nějaký soubor v /tmp. Takhle nevíte, zda se skript vůbec nespouští, nebo zda selže.

A také se podívejte do logu, pokud je něco špatně v cronu (chybná konfigurace), mělo by se to někde objevit.

beer

  • *****
  • 729
    • Zobrazit profil
Re:Cron: spuštění každých 5 minut
« Odpověď #7 kdy: 25. 01. 2016, 14:50:44 »
Kód: [Vybrat]
root@turris:~# cat /var/log/messages | grep cron | grep ipv4
2016-01-25T14:11:09+01:00 info cron[4917]: (*system*) BAD FILE MODE (/etc/cron.d/ipv4-public)

Kit

Re:Cron: spuštění každých 5 minut
« Odpověď #8 kdy: 25. 01. 2016, 14:55:06 »
Kód: [Vybrat]
root@turris:~# cat /var/log/messages | grep cron | grep ipv4
2016-01-25T14:11:09+01:00 info cron[4917]: (*system*) BAD FILE MODE (/etc/cron.d/ipv4-public)

Proč kdekdo místo crontabu používá cron? Ten aspoň při uložení cronu řekne, co se mu nelíbí.

beer

  • *****
  • 729
    • Zobrazit profil
Re:Cron: spuštění každých 5 minut
« Odpověď #9 kdy: 25. 01. 2016, 14:56:55 »
Nevím, jaký cron je v OpenWRT, ale některým implementacím je potřeba poslat signál, že si mají přenačíst definiční soubory. Také se mi zdá divný formát souboru cronu – máte to pod cron.d, tedy je to globální cron, ale nikde tam nevidím jméno uživatele, pod kterým má ten skript běžet. Další věc je, že skript z cronu se spouští s jiným nastavením proměnných prostředí, např. PATH – ve skriptu máte příkazy wget nebo git uváděné bez cesty, takže je možné, že se nenajdou. Pokud si chcete ověřit, že se skript alespoň spouští, dejte si hned na začátek touch na nějaký soubor v /tmp. Takhle nevíte, zda se skript vůbec nespouští, nebo zda selže.

A také se podívejte do logu, pokud je něco špatně v cronu (chybná konfigurace), mělo by se to někde objevit.

Doplněn uživatel root, uvidíme, jestli bude OK, ve scriptu je uvedeno
Kód: [Vybrat]
cd /mnt/sdcard/mnt/sdcard/slozka/
tak by to mělo být ok, nebo mám tomu cronu zadávat tu cestu?

beer

  • *****
  • 729
    • Zobrazit profil
Re:Cron: spuštění každých 5 minut
« Odpověď #10 kdy: 25. 01. 2016, 14:57:44 »
oprava
cd /mnt/sdcard/slozka/


Dzavy

Re:Cron: spuštění každých 5 minut
« Odpověď #11 kdy: 25. 01. 2016, 14:59:22 »
Kód: [Vybrat]
root@turris:~# cat /var/log/messages | grep cron | grep ipv4
2016-01-25T14:11:09+01:00 info cron[4917]: (*system*) BAD FILE MODE (/etc/cron.d/ipv4-public)

http://www.cyberciti.biz/faq/unix-linux-cron-bad-file-mode-error/

Re:Cron: spuštění každých 5 minut
« Odpověď #12 kdy: 25. 01. 2016, 15:07:38 »
Kód: [Vybrat]
root@turris:~# cat /var/log/messages | grep cron | grep ipv4
2016-01-25T14:11:09+01:00 info cron[4917]: (*system*) BAD FILE MODE (/etc/cron.d/ipv4-public)

To jsou ta oprávnění 777. To asi není dobrý nápad nechat kohokoli editovat ten soubor, když tam může napsat, že se má jeho příkaz spustit pod rootem…

tak by to mělo být ok, nebo mám tomu cronu zadávat tu cestu?
Jde o cesty k těm programům, které v tom skriptu spouštíte. Když máte ve skriptu uveden příkaz wget, znamená to, že se projdou adresáře uvedené v $PATH a hledá se v nich spustitelný soubor wget. Ten, který se najde jako první, se spustí. Třeba u mne je to /usr/bin/wget (zjistíte to příkazem which wget). Jenže pokud při spuštění v tom cronu nebude /usr/bin uvedeno v $PATH, wget se nenajde. Proto je lepší v tom skriptu uvádět plné cesty k programům.

beer

  • *****
  • 729
    • Zobrazit profil
Re:Cron: spuštění každých 5 minut
« Odpověď #13 kdy: 25. 01. 2016, 15:41:38 »
kde najdu plnou cestu k programu cd?

which cd mi nic nenajde...

Peter Fodrek(unlogged)

Re:Cron: spuštění každých 5 minut
« Odpověď #14 kdy: 25. 01. 2016, 15:54:42 »
Príkazy  shellu nemajú  cestu
cd  je príkaz shellu