Come posso sapere se il mio cron job orario è stato eseguito?


26

Ho creato un file chiamato ntpdatein/etc/cron.hourly

#!/bin/sh
/usr/sbin/ntpdate-debian
date > /tmp/william_tmp
date > /william_tmp
date > ~/william_tmp
echo test

Ho anche fatto Chmod 755 su questo file.

Tuttavia, non posso dire se il file è stato eseguito o meno!

Il file non viene creato in nessuna delle 3 directory.

Se eseguo manualmente, cd / && run-parts --report /etc/cron.hourlyi file vengono creati e ottengo l'eco.

Qualcuno può consigliare (idealmente passo dopo passo!) Le istruzioni per verificare che funzioni?

Risposte:


25

Una delle principali insidie ​​di cron è l'esecuzione cron in un ambiente shell estremamente limitato, di conseguenza molte variabili non vengono esportate nell'ambiente, principalmente $ PATH. Assicurarsi di utilizzare tutti i percorsi assoluti per eseguibile, comprese le funzioni comuni, come echo, uptime, date, ecc tutti bisogno di usare percorsi completi ( /bin/echo, /bin/date, /usr/bin/uptime). Per determinare il percorso di un eseguibile, puoi usare il whichcomando in questo modo: which echo- questo ti mostrerà il percorso completo di quello strumento.


Come discusso in chat, grazie per questo e spero davvero che possa aiutare qualcun altro ... Mentre ho fatto il percorso di fall to ntpdate, sono così abituato a Windows e l'eco / data essendo solo "incorporato", non l'ho fatto ' Penso che avrei bisogno di un percorso completo ... imparare molto di più su Linux e ha perfettamente senso!
Wilhil,

36

Dovresti cercare nel tuo /var/log/syslogfile di registro. Se un cron è stato eseguito, avrebbe una riga come:

Jun 11 19:09:01 penguin CRON[17376]: (root) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete)
Jun 11 19:17:01 penguin CRON[17799]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

Per suggerimenti sulla risoluzione dei problemi, consultare https://help.ubuntu.com/community/CronHowto#Tro troubleshooting_and_Common_Problems


Non c'è nulla in Syslog e non riesco a vedere alcun motivo per cui fallirebbe da quel link :(
wilhil

1
Se non ci sono voci in syslog ( grep -i cron /var/log/syslog /var/log/syslog.1), inizia a verificare se il demone cron è in esecuzione: ps uww -C crondovrebbe contenere una riga con un processo.
Lekensteyn,

Ci scusiamo per essere fuorviante, ci sono entusiasmi per Cron nel syslog, proprio nulla relativo a questo comando ... So che alcuni lavori vengono eseguiti come ogni ora, ricevo un nuovo avviso di posta ... AFAIK, quelli che stanno funzionando sono da crontab, non c'è niente in cron.hourly che è quello che sto cercando di far funzionare
Wilil

2

Prova a cambiare la prima riga del tuo script (l'interprete) in:

#!/bin/bash

Ho anche avuto problemi in passato, con variabili d'ambiente e problemi PATH. Dopo aver cambiato l'interprete ai bashmiei problemi erano spariti.


1

Dato che ho aggiunto lo clearme.shscript in/etc/cron.hourly/

Basta filtrare le attività CRON nel terminale con il potente egrep e awk :

$ cat /var/log/syslog | egrep clearme | awk "{ print $1 }" > ~/Desktop/cronlog.txt

L'output sarà simile a:

Jan 14 15:20:01 markets-dev CRON[10089]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 15:40:01 markets-dev CRON[18042]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:00:01 markets-dev CRON[22817]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:20:01 markets-dev CRON[28183]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:40:01 markets-dev CRON[411]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 17:00:01 markets-dev CRON[5442]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 17:20:01 markets-dev CRON[11935]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)

Per spiegare tutto passo per passo:

  1. cat / var / log / syslog - stampa il registro di sistema
  2. egrep clearme - ma seleziona solo le righe che contengono il clearme di testo
  3. awk "{print $ 1}" - stampa la riga che contiene il testo clearme
  4. > ~ / Desktop / cronlog.txt - genera i risultati nel file cronlog.txt situato nella directory Desktop .

Il 4 ° passaggio è facoltativo. Stampa solo i risultati nel terminale anziché nel file.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.