Come eseguire crontab come utente: www-data?


32

My LAMP è configurato per funzionare poiché user:www-datatutti i file e le cartelle vengono creati con tali autorizzazioni.

Ho installato per crontab come utente @ Ubuntu.

Quindi faccio crontab -ee uso questo comando:

*/5 * * * * php /var/www/public/voto_m/artisan top >/dev/null 2>&1

Fondamentalmente quel comando crea solo il file cache nel posto specificato (nessun problema con quello), ma quel file cache viene creato con l'utente: permessi dell'utente non user:www-datapermessi.

Come posso fare in modo che crei file per impostazione predefinita con user:www-dataautorizzazioni?
Non posso andare e chownogni volta che viene ricreato il file.

Grazie.


Si noti che alcuni script crontab che vengono eseguiti come dati www (ad esempio per awstats, o php5sessionclean) si trovano nelle /etc/cron.*directory e quindi non sono visibili crontab -e(anche quando si specificano i dati www dell'utente ).
Skippy le Grand Gourou,

Risposte:


40

È possibile scrivere la voce nel crontab di sistema /etc/crontab, che accetta un argomento aggiuntivo che specifica l'utente da eseguire come (di solito root, ma può essere www-data).

La tua linea diventerebbe:

*/5 * * * * www-data php /var/www/public/voto_m/artisan top >/dev/null 2>&1

Oppure puoi modificare il crontab dei dati www dell'utente con su:

sudo su -c "crontab -e" www-data

1
in realtà la seconda opzione non funziona sulla maggior parte delle versioni di Ubuntu
user123

La seconda opzione funziona per me su 12.04LTS. Forse non è nelle versioni successive?
mivk,

1
la seconda opzione non funziona il 14.04
dgoosens,

Per facilitare la gestione, la linea può anche essere messo in un proprio file in /etc/cron.dcon un nome descrittivo, ad esempio , /etc/cron.d/artisan.
fkraiem,

2
Per la seconda opzione, prova questosudo su -c "crontab -e" www-data -s /bin/bash
Lunfel,

51

Puoi anche eseguire crontab con l' -uargomento per modificare un crontab per un utente specifico:

sudo crontab -u www-data -e

funziona il 14.04
dgoosens il

3

Per eseguire un crontab come dati www dell'utente è possibile utilizzare il comando seguente:

crontab -u www-data -e

Quindi scrivi una riga, ad esempio per eseguire un file php ogni 15 minuti:

*/15  *  *  *  * php -f /path_to_cron/cron.php

Quando lo salvi, ti verrà chiesto dall'editore:

File Name to Write: /tmp/crontab.HMpG7V 

Salvalo lì, non preoccuparti. crontab -eapre un file in / tmp invece del crontab effettivo in modo che possa verificare la presenza di errori nel nuovo crontab e impedire all'utente di sovrascrivere il crontab effettivo con tali errori. Se non ci sono errori, il tuo crontab effettivo verrà aggiornato. Se crontab -e ha appena scritto direttamente sul tuo crontab reale, rischieresti di spazzare via l'intero crontab.

Per verificare che il tuo cronjob sia in esecuzione, puoi controllare i log cron. tipicamente in /var/log/cron.log o eseguendo il comando seguente:

crontab -u www-data -l

Questo ha funzionato per me su Ubuntu
tristanbailey il

In precedenza a ciò era stato risposto correttamente e in modo più conciso dal comandante del codice oltre 4 anni prima. Hai omesso l'uso di "sudo". e ha inserito informazioni non richieste riguardanti il ​​formato della cron line.
HörmannHH,

@RichieHH, Perché dovrei aggiungere il sudo? Chi ha detto che l'utente non è già in esecuzione come root? Chiunque usi questo comando dovrebbe avere abbastanza conoscenza per sapere che se ha bisogno di eseguire il comando con i privilegi dovrà eseguirlo con sudo, altrimenti meglio non toccare .. e dici in modo più conciso ...? il comandante di codice ha appena digitato il comando ma non ha fornito ulteriori informazioni
SpaceBiker

.. se sei così intelligente, è meglio che inizi a dare risposte invece di criticare il lavoro degli altri, forse allora inizi a ottenere un po 'di reputazione
SpaceBiker

-1

Vorrei aggiungere un altro approccio. Come altri hanno già detto, Ubuntu (16.04 qui) e www-data crontab sembrano essere inaffidabili (forse è una cosa di sicurezza?).

Ad ogni modo, nella nostra azienda ci piace avere tutti i cronjobs su un server facilmente accessibili, così da non perdere nulla. Allo stesso tempo, non vogliamo eseguire tutto (nulla di veramente!) Come root.

Quindi corriamo

sudo crontab -e 

Come fai normalmente, e quindi specifichiamo il comando come

* * * * * /bin/su - www-data -s /bin/bash -c '/path/to/command'

Questo eseguirà / path / to / command come www-data mantenendo il cronjob nel file cronjobs di root (e che funzionerà sempre correttamente). Ha il piacevole vantaggio di poter scrivere i file di log come root (per la massima sicurezza) usando le pipe.

Nota che stiamo passando la nostra shell preferita, questo potrebbe anche essere / bin / sh per una shell più semplice (ci piacciono le funzionalità bash complete). Www-data non ha una shell specificata, quindi otterrai errori senza di essa. Normalmente cron esegue i lavori solo con / bin / sh.

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.