crontab in esecuzione come utente specifico


19

Devo eseguire uno script ogni giorno. Lo script deve essere eseguito come un utente specifico (es. Utente1) non come root. Quindi ho inserito il file cron in /etc/cron.d e ho inserito il nome utente nella riga (seconda colonna). Ma dà un errore dicendo che il comando non è stato trovato. Sospetto che lo script non sia stato eseguito come ambiente user1. Ho dimenticato qualcosa?


3
Puoi mostrarci la voce crontab che stai usando per favore?
user9517

Risposte:


33

Solo /etc/crontabe i file in /etc/cron.d/hanno un campo username. In quel file puoi farlo:

1 1 * * * username /path/to/your/script.sh

Dal crontab di root sudo crontab -epuoi usare:

1 1 * * * su username -c "/path/to/your/script.sh"

Oppure puoi usare l'attuale crontab dell'utente in questo modo:

sudo crontab -u username -e

La seconda colonna in qualsiasi file crontab è per l'ora in cui si desidera eseguire il lavoro. Intendevi il sesto campo?


File in /etc/cron.d accetta un argomento utente: help.ubuntu.com/community/CronHowto#Advanced_Crontab e perché stai facendo "sudo su" se stai eseguendo come root? In ogni caso, si desidera che "su -l" utilizzi l'ambiente di accesso per l'utente, poiché questo è molto probabilmente un problema PATH, dalla descrizione del problema.
cjc

I file in /etc/cron.d non sono un'estensione di / etc / crontab? Sui sistemi devo consegnare tutti i file in /etc/cron.d con un nome utente specificato.
user9517

Ah davvero. /etc/cron.d/i file fanno parte di /etc/crontab. sudoè anche inutile. Rimuoverò quella parte.
Ladadadada,

2
Per quanto riguarda mettere sudo nel crontab: (a) sudo su... è generalmente superfluo; sudo -u <user> <command>di solito è sufficiente. (b) sudo si strozzerà su alcuni sistemi se non è collegato un TTY (come quando eseguito da cron). Questo può essere corretto nel tuo file sudoers.
Tylerl,

4

Potrebbe essere necessario impostare il PERCORSO per quell'utente, se l'eseguibile che stai usando è, diciamo, / usr / local / bin. Per impostare il PERCORSO, metti qualcosa del genere prima dei cronjobs:

PATH=/bin:/usr/bin:/usr/local/bin

*/5 * * * * user1 sample_executable

L'altro modo è specificare completamente il percorso di sample_executable nel tuo cronjob, quindi:

*/5 * * * * user1 /path/to/sample_executable

Se sample_executable fa riferimento agli eseguibili non inclusi nel PERCORSO standard, è necessario utilizzare la prima opzione.


1

La directory tipica per crontabs utente è in / var / spool / cron / crontabs. Il formato del file è quello che non include il nome utente. I crontab dell'utente sono di proprietà dell'utente e prendono il nome dell'utente con la modalità 0600. È consigliabile gestirlo scrivendo il file di tabulazione e utilizzando crontab -u username filenameper impostare le voci cron desiderate per quell'utente.

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.