Cron script non eseguito su Mavericks


12

Ho configurato un file crontab utente come segue:

*/2 * * * * /Users/[my user]/Dropbox/htdocs/auto-update.sh

Ma non verrà eseguito. Ho aspettato, tipo, 10-15 minuti. Perché?

Il comando auto-update.sh viene eseguito facilmente se eseguito manualmente. Come posso spezzare la catena di esecuzione e far funzionare il mio script da cron?


1
Quale sistema operativo stai eseguendo? Cron è obsoleto su OS X, quindi potresti dover avviare il demone?
bmike

Più recente, 10.9.2. Come lo faccio? Voglio solo uno script che funzioni ogni ora, per esempio. Nello script precedente ero disperato perché non funzionava e l'ho modificato per funzionare ogni 2 minuti.
RomaValcer

1
Il demone cron dovrebbe essere avviato automaticamente (con la sua sostituzione, launchd) se esiste un file crontab. Vedi /System/Library/LaunchDaemons/com.vix.cron.plist (in particolare gli elementi KeepAlivee QueueDirectories).
Gordon Davisson,

OK, Keeplive è lì, ma solo il percorso elencato è '/ etc / crontab' che non esiste. In QueueDirectories esiste un file esistente nella cartella riservata '/ usr / lib / cron / tabs'. Quando lo apro con su e vim, c'è il mio compito.
RomaValcer,

Risposte:


17

L'ambiente in cui viene eseguito un cron job è leggermente diverso da una shell interattiva; è probabile che lo script sia in esecuzione, ma non correttamente. Una delle maggiori differenze è che per i lavori cron, il PERCORSO predefinito è solo "/ usr / bin: / bin", quindi se si usano comandi che non sono in / usr / bin o / bin, non saranno trovato a meno che lo script non imposti il ​​proprio PERCORSO o fornisca percorsi espliciti ai comandi. L'altra grande differenza è semplicemente che non è collegato a una sessione interattiva, quindi se prova a fare qualcosa di interattivo (leggi dal terminale, ecc.) Che fallirà. Prova a cambiare la voce cron in:

*/2 * * * * /Users/[my user]/Dropbox/htdocs/auto-update.sh >>/tmp/auto-update.log 2>&1

... e vedi se qualcosa di informativo appare nel registro.


Questo è meglio del mio sforzo: sentiti libero di incorporare la mia idea di logger se migliora la tua risposta.
bmike

Il log non è stato visualizzato.
RomaValcer

@RomaValcer: è strano - significa che non arriva nemmeno al lancio dello script. Vorrei correre ps -ax | grep [c]rone vedere se elenca il demone cron (/ usr / sbin / cron) in esecuzione. In tal caso, prova il test del logger di bmike. In ogni caso, controlla i registri (/var/log/system.log e la voce "Tutti i messaggi" nell'utilità Console) e vedi se c'è qualcosa di rilevante.
Gordon Davisson,

Sì, è lì. Ma i registri non mostrano nulla che inizi in orario programmato.
RomaValcer,

4

È difficile da dire, ma cosa succede se si aggiunge un secondo cron job da eseguire ogni 5 minuti circa e si fa chiamare uno strumento di sistema che registra i messaggi su system.log?

0,5,10,15,20 * * * * /usr/bin/logger "cron is working"

In questo modo saprai che cron è in esecuzione per l'utente in questione e può concentrarsi sull'avvio di cron o sulla correzione dello script in modo che venga eseguito nell'ambiente cron limitato. (Puoi guardare l'orologio a muro e scegliere alcune volte che stanno arrivando presto o anche nei prossimi minuti - ad esempio, la modifica alle 12:34 inserisci 35,36,37,38 per l'esecuzione dei minuti e salva il file cron .)


4

È da un po 'che fai questa domanda, ma sembra che non sia stata trovata alcuna soluzione in questo thread.

A seconda del modo in cui crei un crontab utente, potrebbe essere necessario eseguirlo dopo averlo modificato:

crontab ~/.yourcrontabfile

Per vedere se il nuovo crontab (anche dopo averlo modificato) è stato attivato, controlla con:

crontab -l

Non funziona Crontab -l mostra che i croni sono impostati, ma non funziona ancora.
PKHunter

1

Ho avuto lo stesso problema. Devi aggiungere il percorso al tuo script bash:

#!/bin/sh
PATH=/usr/local/bin:/usr/local/sbin:~/bin:/usr/bin:/bin:/usr/sbin:/sbin

0

Ho avuto lo stesso problema. È andato via dopo aver aggiunto una nuova riga dopo il mio lavoro nel mio file crontab (sono un crontab totale n00b, quindi non ho idea se questo comportamento sia ampiamente noto o meno).

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.