- Lähtökohta
- Olen luonut komentojonotiedoston
komentojono1
, joka kutsuu komentojonotiedostoakomentojono2
seuraavanlaisella rivillä:komentojono2 parametri1 parametri2
Olen tallentanut molemmat komentojonotiedostot kotihakemistoni alla olevaan
bin
-alihakemistoon. Bin-alihakemisto on määritelty komentojenhakupolkujen (PATH
-muuttuja) joukkoon komentoriviprofiilissani. Olen muuttanut molempien komentojonotiedostojen oikeuksia niin, että molemmat toimivat komentoriviltä suoritettuina.
Olen lisännyt komentojono1:ncrontab
-tiedostooni siten, että se suoritetaan kerran minuutissa:* * * * * /home/jani/bin/komentojono1
- Ongelma
- Kerran minuutissa automaattisesti suoritettuna komentojono1 ei toimi odottamallani tavalla, niin kuin se toimii komentoriviltä suoritettuna.
- Ongelman syy
- Olen kutsunut komentojono1:ssä komentojono2:ta ilman täyttä hakemistopolkua sen edessä. Kun
cron
suorittaa komentojono1:n, se ei lue komentoriviprofiiliani sitä ennen, eikä siksi tiedä etsiä komentojono2:ta kotihakemistoni alla olevasta bin-hakemistosta. - Ratkaisu
- Muutan komentojono1:tä niin, että komentojono2:n kutsu tehdään käyttämällä täyttä hakemistopolkua itse tiedoston nimen edessä:
/home/jani/bin/komentojono2 parametri1 parametri2
Tämän jälkeen komentojono1:n automaattinen suoritus toimii tarkoittamallani tavalla.
- Huomautuksia
-
- Yleisesti ottaen cronin suoritus poikkeaa vuorovaikutteisesta komentorivisuorituksesta siksi, että Ubuntussa käytettävien vuorovaikutteisten komentorivien tulkkina toimii
Bash
, ja cron taas puolestaan käyttää/bin/sh
-komentoa, joka on symbolinen linkkidash
-tulkkiin. Kun cron ajaa dashin ei-vuorovaikutteisena, se ei lue mitään profiilitiedostoja, ja siten nämä kaksi ympäristöä (crontab ja vuorovaikutteinen komentorivitulkkisovellus kutenPääte
) voivat poiketa toisistaan huomattavastikin. - Pitemmän päälle tässä kuvattua elegantimpi ratkaisu olisi luultavasti luoda komentojonotiedosto
cron-suoritus
, joka ottaa parametrinä komentojonotiedoston parametreineen. Cron-suoritus lukisi komentoriviprofiilini ja lisäksi selvittäisiDBUS_SESSION_BUS_ADDRESS
-muuttujan arvon ennen kuin suorittaisi sille komentorivillä annetun komentojonotiedoston parametreineen.Sen jälkeen lisäisin
/home/jani/bin/cron-suoritus
-komentojonon aina varsinaisen komentojonotiedoston ja sen parametrien eteen aina, kun haluaisin suorittaa komentojonotiedoston crontabin kautta automaattisesti. Silloin crontabin suorittamien komentojonotiedostojen ajo muistuttaisi enemmän niiden suorittamista komentoriviltä ilman, että jokaiseen komentojonotiedostoon täytyisi tehdä crontabista ajamisen huomioonottavia tarkennuksia ja erityisehtoja.Koska cron-suoritus lukisi komentoriviprofiilini ennen sille annetun komentojonon suorittamista, ei tämän komentojonon eteen tarvitsisi crontabissa lisätä täyttä hakemistopolkua:
* * * * * /home/jani/bin/cron-suoritus komentojono parametri
- Yleisesti ottaen cronin suoritus poikkeaa vuorovaikutteisesta komentorivisuorituksesta siksi, että Ubuntussa käytettävien vuorovaikutteisten komentorivien tulkkina toimii
Tag: cron
-
[Ratkaisu] Cronin suorittama komentojonotiedosto ei toimi
-
[Ratkaisu] Cron ei pidä lokikirjaa
- Lähtökohta
- Olen lisännyt tavallisen käyttäjän tiliini liittyvään
crontab
-tiedostooni kerran minuutissa suoritettavan komentojonon.
Olen muokannut/etc/syslog.conf
-tiedostoa siten, että siinä on seuraavat rivit:cron.* /var/log/cron.log
ja
*.=info;*.=notice;*.=warn;\ auth,authpriv.none;\ cron,daemon.none;\ mail,news.none -/var/log/messages
Olen tämän jälkeen käynnistänyt
cronin
uudestaan komentamallasudo /etc/init.d/cron restart
. Haluan, että cron kirjaa lokia/var/log/cron.log
-tiedostoon. - Ongelma
- Tiedostoa /var/log/cron.log ei ole, eli cron ei pidä lokia lainkaan, tai se ei pidä lokia haluamassani tiedostossa.
- Ongelman syy
- En ole käynnistänyt
syslogd
:tä uudestaan. - Ratkaisu
- Käynnistän syslogd:n uudestaan komentamalla
sudo /etc/init.d/sysklogd restart
. Sen jälkeen /var/log/cron.log alkaa täyttyä cronin lokitiedoilla. - Huomautus
- Syslogd ilmoitti uudelleenkäynnistyksen yhteydessä seuraavaa:
chown: tiedostoa "/var/log/cron.log" ei voi käsitellä: No such file or directory
Ilmeisesti tämä ei kuitenkaan haittaa. Käynnistin syslogd:n välittömästi toisen kerran uudestaan, ja tällä kertaa se ei antanut virheilmoitusta.