2013-08-14 7 views
7

Ho installato incron dal repository EPEL (prima di chiedere; Sì, ho anche provato a scaricare l'origine e compilare localmente, stessi risultati) e sto tentando di impostare un processo sul mio CentOS 6.4 scatola (finale) virtuale che ho prototipato con successo sul mio locale Ubunto 12.04 macchina:incrond in esecuzione ma non eseguendo il comando in CentOS 6.4

Alcune informazioni in anticipo:

  • SELinux è impostato PERMISSIVE
  • ho aggiunto il mio script (s) e chiamati eseguibili a tutti con NOPASSWD utilizzando visudo per aggirare alcuni problemi di permessi ...

Se invoco il mio script dalla riga di comando con sudo /path/to/my/script.sh arguments funziona come un incantesimo.

sudo service incrond status verifica che l'incrond sia in esecuzione. root e myusername vengono aggiunti a /etc/incron.allow, /etc/incron.deny è vuoto.

mio incrotab per root è:

/path/to/dropfolder/ IN_CLOSE_WRITE sudo /path/to/my/script.sh [email protected]/$# 

Eventi a /path/to/dropfolder/ risultato a proprio nulla accade. Nessun log viene generato, nessun messaggio, nessuna azione si verifica sui file nella cartella.

Così ho studiato: è stato suggerito che cron viene eseguito in un ambiente minimale e che per eseguire complessi comandi/script potrebbe essere necessario eseguire il .bashrc e/o esportare il PATH all'inizio del comando cron.

Nota: posso trovare alcuna documentazione di supporto che incron corre anche in un ambiente minimale, ma come il mio google-fu non è riuscito a portare a nessun risultato utile, inerenti direttamente alla incron ho pensato WTH (e bing-fu!) , Ci proverò!

Edit: documentazione indica che incron fuga da tabelle di sistema o radice prende env dal suo ambiente ospite, quindi solo incron eseguita da utenti non-root dovrebbe richiedere alcun tipo di ENV o PATH giocherellare

Così & hellip; incrontab per root:

/path/to/dropfolder IN_CLOSE_WRITE . /home/myusername/.bashrc; export PATH=$PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin; sudo /path/to/my/script.sh [email protected]/$#" 

Nessun dadi & hellip; provato && anziché ; = nessun dado. Se riesci a pensare ad una variazione su quanto sopra, probabilmente l'ho provato e hellip;

Quindi, proviamo un po 'di azione restorecond -R /usr/sbin/incrond /etc/incron*! Huh, nessun cambiamento neanche lì. service incrond stop seguito da service incrond start e quindi service incrond restart e hellip; no, no e no.

misure drastiche: yum remove incron e yum install incron, chkconfig incrond on e poi per buona misura un sudo reboot!

Niente.

Non riesco a ottenere nulla da /tmp/ IN_ALL_EVENTS echo boo>>/home/myusername/boofile.txt, quindi la mia impossibilità di fare anche un env>>envfile.txt per verificare se incron è in esecuzione in un ambiente sparse & hellip; (Vedi sopra nota)

Eppure: service incrond status cede incrond (pid xxxx) is running...

Che cosa mi manca? Deve essere grande ed evidente e spero che qualcuno possa farmi sentire un idiota in breve tempo!

un ulteriore esame di /var/log/cron produce risultati come questo: Aug 14 15:05:30 hostname incrond[1584]: (root) CMD (sudo /path/to/DropFolder/script/subfolder/script-Beta-1.sh /home/username/DropFolder/testfile.file) -Si ho fatto che il mio copione era eseguibile ..

così incrond è infatti tentando di fare qualcosa, ma non ottengo alcuna uscita da nessuna parte ... anche un semplice echo > /dev/pts/0 produce risultati nada.

  • ringraziamenti per la riparazione il mio schifo formattazione lavoro
+0

Grazie, ho avuto un problema diverso, ma io trovato facendo: 'tail -f/var/log/cron | grep --line-buffered incron' e ho notato che ogni comando viene eseguito due volte, ma questo è un altro problema .. :) – Niclas

risposta

7

Ok, ecco la risposta:

Nonostante tutta la documentazione che posso trovare di condanna per il contrario, incrond sotto CentOS 6.4 viene eseguito in una rada ambiente e si comporta come cron. questo NON è il caso di Ubuntu, dove incron eredita il suo ambiente da root per le tabelle di sistema e le tabelle root e solo le tabelle utente vengono eseguite in un ambiente sparse. Questo ovviamente significa che se stai chiamando uno script (io sono) lo script ha bisogno di costruire il suo ambiente e ogni cosa deve avere un percorso completo. TUTTO. (Beh, tranne per comandi incorporati della shell: p)

numerose Google e e Bing e Stack Overflow e server Fault ricerca tutti mi hanno detto che cron opera in questo modo, ma tutti anche sembravano indicare che incron funziona come descritto nella documentazione , che fa sotto Ubuntu ...

Bottom line, funziona ora, yay!

  • Credo che questo va solo a dimostrare: in caso di dubbio definire l'ambiente e utilizzare percorsi completi ... ehm, in realtà, solo che che tutto il tempo e risparmiare un mal di testa.

(questo non affronta il problema con l'applicazione di una politica di sicurezza SELinux per incron, ma io preoccuparsi che più tardi, in un altro post ...)

+0

grazie signore per aver condiviso questo. Aveva lo stesso problema, e ha funzionato dopo aver dichiarato esplicitamente tutti i percorsi. –

Problemi correlati