Come specificare in crontab da quale utente eseguire lo script? [chiuso]


176

Ho pochi lavori crontab eseguiti sotto root, ma questo mi dà alcuni problemi. Ad esempio, tutte le cartelle create durante il processo cron sono nella radice dell'utente e nella radice del gruppo. Come posso farlo funzionare sotto i dati www dell'utente e raggruppare i dati www in modo che quando eseguo gli script dal mio sito Web posso manipolare tali cartelle e file?

Il mio server funziona su Ubuntu.
Il lavoro crontab corrente è:

*/1 * * * * php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1

Risposte:


336

Invece di creare un crontab da eseguire come utente root, creare un crontab per l'utente che si desidera eseguire lo script. Nel tuo caso, crontab -u www-data -emodificherà il crontab per l'utente www-data. Basta inserire il comando completo e rimuoverlo dal crontab dell'utente root.


54
Funziona allo stesso modo quando lo usi crontab -ecome utente specifico.
kulak,

7
Ma questo crontab verrà verificato all'avvio del sistema o solo quando l'utente accede?
Bruno Finger,

11
cronsui sistemi * nix non richiede che un utente acceda per eseguire i lavori specificati nel crontab di un utente specifico.
Mike

2
Questo imposterà anche l'id del gruppo come richiesto dall'OP? Cosa succede se il gruppo desiderato è diverso dal gruppo principale dell'utente?
askyle

49

EDIT: Nota che questo metodo non funzionerà con crontab -e, ma funziona solo se modifichi direttamente / etc / crontab. Altrimenti, potresti ricevere un errore simile/bin/sh: www-data: command not found

Poco prima del nome del programma:

*/1 * * * * www-data php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1

Ciò lo farebbe funzionare come utente strega di Apache è www-data giusto?
arma,

19
Si noti che questo metodo non funziona con crontab -e, ma funziona solo se si modifica /etc/crontabdirettamente. Leggi il commento nella parte superiore di questo file per ulteriori informazioni.
imgx64,

5
L'utente può essere specificato solo nel crontab di sistema
James Roth,

Ho alcuni lavori nei tempi previsti sul crontab di sistema. Quando lo faccio sudo crontab -e, vedo i lavori. Ma apro il file /etc/crontabnon ci sono lavori. È strano? Inoltre, se sudo crontab -eaggiungo un lavoro con l'utente specificato, funzionerà?
eNeMetcH,

14

Dato che stai eseguendo Ubuntu, il tuo crontab di sistema si trova in /etc/crontab.

Come utente root (o usando sudo), puoi semplicemente modificare questo file e specificare l'utente che dovrebbe eseguire questo comando. Ecco il formato delle voci nel crontab di sistema e come dovresti inserire il tuo comando:

# m h dom mon dow user  command
*/1 * * * * www-data php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1

Naturalmente le autorizzazioni per lo script php e il file di registro devono essere impostate in modo che l' www-datautente possa accedervi.


Ho pensato che questo dovrebbe essere equivalente a crontab -eperò; ma no.
tintinnio il

5
I documenti di Ubuntu hanno raccomandato di non modificare / etc / crontab poiché possono essere sovrascritti dagli aggiornamenti. crontab -e creerà un file cron specifico dell'utente in / var / spool / cron / crontabs.
Hemm,

9

Puoi anche provare a usare runuser(come root) per eseguire un comando come un altro utente

*/1 * * * * runuser php5 \
            --command="/var/www/web/includes/crontab/queue_process.php \
                       >> /var/www/web/includes/crontab/queue.log 2>&1"

Guarda anche: man runuser


runusernon è incluso in Ubuntu.
Raptor,

1
runuser è nell'ultima versione di Ubuntu. Ci sono anche alternative a runuser come discusso in questa risposta unix.stackexchange.com/questions/169441/ubuntu-runuser-command , ad esempio su, e sudo.
Russell E Glaue,

8

Il suggerimento di Mike sembra il "modo giusto". Mi sono imbattuto in questo thread volendo specificare l'utente da eseguire vncserveral riavvio e volevo mantenere tutti i miei lavori cron in un unico posto.

Stavo ottenendo il seguente errore per il cron VNC:

vncserver: The USER environment variable is not set. E.g.:

Nel mio caso, sono stato in grado di utilizzare sudoper specificare con chi eseguire l'attività.

@reboot sudo -u [someone] vncserver ...

1
Ho ricevuto questo messaggio sui registri:sudo: sorry, you must have a tty to run sudo
Renato Gama,

@renatoargh Probabilmente stai utilizzando RedHat. Dai un'occhiata a questa risposta su Unix.SE.
Kaiser
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.