¿Cómo ejecutar crontab como usuario: www-data?

32

Mi LAMP está configurado para funcionar como user:www-datay todos los archivos y carpetas se crean con esos permisos.

Tengo la configuración para crontab como usuario @ ubuntu.

Entonces lo hago crontab -ey uso este comando:

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

Básicamente, ese comando solo crea un archivo de caché en el lugar especificado (sin problemas con eso), pero ese archivo de caché se crea con el usuario: permisos de usuario, no user:www-datapermisos.

¿Cómo puedo hacer que, de forma predeterminada, cree un archivo con user:www-datapermisos?
No puedo ir y chowncada vez que se recrea el archivo.

Gracias.

arma
fuente
Tenga en cuenta que algunas secuencias de comandos crontab que se ejecutan como www-data (por ejemplo awstats, for php5sessionclean) se encuentran en /etc/cron.*directorios y, por lo tanto, no son visibles crontab -e(incluso cuando se especifica www-data ).
Skippy le Grand Gourou

Respuestas:

40

Puede escribir su entrada en el crontab del sistema /etc/crontab, que toma un argumento adicional que especifica el usuario para ejecutarlo (generalmente root, pero puede ser www-data).

Tu línea se convertiría en:

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

O puede editar el crontab del usuario www-data con su:

sudo su -c "crontab -e" www-data
mivk
fuente
1
En realidad, la segunda opción no funciona en la mayoría de las versiones de Ubuntu
user123
La segunda opción me funciona en 12.04LTS. ¿Quizás no en versiones posteriores?
mivk
1
la segunda opción no funciona el 14.04
dgoosens
Para facilitar la administración, la línea también se puede poner en su propio archivo de /etc/cron.dcon un nombre descriptivo, por ejemplo , /etc/cron.d/artisan.
fkraiem
2
Para la segunda opción, prueba estosudo su -c "crontab -e" www-data -s /bin/bash
Lunfel
51

También puede ejecutar crontab con el -uargumento para editar un crontab para un usuario específico:

sudo crontab -u www-data -e
Code Commander
fuente
esto funciona el 14.04
dgoosens
3

Para ejecutar un crontab como usuario www-data puede usar el siguiente comando:

crontab -u www-data -e

Luego escribe una línea, por ejemplo, para ejecutar un archivo php cada 15 minutos:

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

Al guardarlo, el editor le preguntará:

File Name to Write: /tmp/crontab.HMpG7V 

Guárdalo allí, no te preocupes. crontab -eabre un archivo en / tmp en lugar del crontab real para que pueda verificar su nuevo crontab en busca de errores y evitar que sobrescriba su crontab real con esos errores. Si no hay errores, se actualizará su crontab real. Si crontab -e acaba de escribir directamente a su crontab real, entonces correría el riesgo de volar todo su crontab.

Para verificar que se ejecuta su cronjob, puede verificar los registros cron. normalmente en /var/log/cron.log o ejecutando el siguiente comando:

crontab -u www-data -l
motociclista
fuente
Este funcionó para mí en Ubuntu
tristanbailey
Esto fue respondido previamente correctamente y de manera más concisa por el comandante del código de más de 4 años antes. Omitió el uso de "sudo". e introdujo información no solicitada sobre el formato de la línea cron.
HörmannHH
@RichieHH, ¿por qué debería agregar el sudo? ¿Quién dijo que el usuario no se está ejecutando como root? Cualquiera que use este comando debe tener suficiente conocimiento para saber que si necesita ejecutar el comando con privilegios tendrá que ejecutarlo con sudo, de lo contrario, mejor no lo toque ... y usted dice de manera más concisa ...? Code
Commander
.. si eres tan inteligente, es mejor que comiences a dar respuestas en lugar de criticar el trabajo de los demás, tal vez entonces comiences a tener algo de reputación
spacebiker
-1

Me gustaría agregar otro enfoque. Como otras personas mencionaron, Ubuntu (16.04 aquí) y www-data crontab parece no ser confiable (¿tal vez es una cuestión de seguridad?).

De todos modos, en nuestra empresa nos gusta tener todos los cronjobs en un servidor de fácil acceso, para que no te pierdas nada. Al mismo tiempo, no queremos ejecutar todo (¡nada realmente!) Como root.

Por eso corremos

sudo crontab -e 

Como normalmente lo hace, y luego especificamos el comando como

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

Esto ejecutará / path / to / command como www-data mientras mantiene el cronjob en el archivo cronjobs raíz (y eso siempre se ejecutará correctamente). Tiene la buena ventaja de poder escribir los archivos de registro como root (para máxima seguridad) usando tuberías.

Tenga en cuenta que estamos pasando nuestro shell preferido, esto también podría ser / bin / sh para un shell más simple (simplemente nos gustan las capacidades completas de bash). Www-data no tiene un shell especificado, por lo que obtendrá errores sin él. Normalmente cron ejecuta trabajos solo con / bin / sh.

Henrik
fuente