¿Cómo especificar en crontab por qué usuario ejecutar el script?

Tengo pocos trabajos de crontab que se ejecutan en la raíz, pero eso me da algunos problemas. Por ejemplo, todas las carpetas creadas en el proceso de esa tarea cron se encuentran en la raíz del usuario y la raíz del grupo. ¿Cómo puedo hacer para que se ejecute en el usuario www-data y group www-data para que cuando ejecute scripts desde mi sitio web pueda manipular esas carpetas y archivos?

Mi servidor se ejecuta en Ubuntu.
El trabajo actual de crontab es:

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

En lugar de crear un crontab para ejecutar como usuario raíz, cree un crontab para el usuario que desea ejecutar el script. En su caso, crontab -u www-data -e editará el crontab para el usuario de www-data. Simplemente ponga su comando completo allí y elimínelo del crontab del usuario raíz.

EDITAR: Tenga en cuenta que este método no funcionará con crontab -e, pero solo funciona si edita / etc / crontab directamente. De lo contrario, puede obtener un error como /bin/sh: www-data: command not found

Justo antes del nombre del progtwig:

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

Como está ejecutando Ubuntu, el crontab de su sistema se encuentra en /etc/crontab .

Como usuario root (o usando sudo), simplemente puede editar este archivo y especificar el usuario que debe ejecutar este comando. Aquí está el formato de las entradas en el crontab del sistema y cómo debe ingresar su comando:

 # mh 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 

Por supuesto, los permisos para su script php y su archivo de registro deben configurarse para que el usuario de www-data tenga acceso a ellos.

La sugerencia de Mike suena como “la forma correcta”. Me encontré con este hilo que quería especificar el usuario para ejecutar vncserver en el reinicio y quería mantener todos mis trabajos de cron en un solo lugar.

Estaba obteniendo el siguiente error para el cron de VNC:

 vncserver: The USER environment variable is not set. Eg: 

En mi caso, pude usar sudo para especificar con quién ejecutar la tarea.

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

También puede intentar usar runuser (como root) para ejecutar un comando como un usuario diferente

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

Ver también: man runuser