Ejecutando un cronjob como www-data

Ejecutando un cronjob como www-data

Mi servidor se ejecuta en Ubuntu y nginx. Mi problema se refierecron, me gustaría iniciarlo (crontab) usando un archivo -cron.txt, su contenido:

* * * * * /usr/bin/php /var/www/html/test.php >> /var/log/cron.log

Si lo ejecuto usando un comando:, crontab /var/www/html/cron.txtfunciona perfectamente, scriptprueba.phpestá siendo ejecutado. Pero cuando hago lo mismo pero usando un script PHP (que se ejecuta a través del navegador), exec('crontab /var/www/html/cron.txt');no funciona.

Al verificar el cronjob actual con el comando:, crontab -l -u www-dataaparece la línea del archivo, pero Cron no hace su trabajo. ¿Quizás esté relacionado con algunos problemas de permisos? Porque solo funciona ejecutándose como root. ¿Hay alguna manera de obligar a Cron a realizar también las tareas de www-data?

Respuesta1

Por favor use /etc/crontab. Ese método de realizar trabajos cron le permite agregar un nombre de usuario a la tarea. Se verá así:

* * * * * www-data /usr/bin/php /var/www/html/test.php >> /var/log/cron.log

Puede hacerlo nano /etc/crontaby agregar la línea al archivo.

Pero cuando hago lo mismo pero usando un script PHP (que se ejecuta a través del navegador): exec('crontab /var/www/html/cron.txt');, no funciona.

Si eso no funciona, probablemente tenga otro problema además del uso de "crontab". Por ejemplo: ¿no es necesario redirigir? (es decir, ¿usar > /dev/null 2>/dev/null &al final de su comando ejecutivo?).

Respuesta2

Logré lograr lo que quería, todo lo relacionado con el código en mi publicación inicial está bien, lo único que debería haber sabido es que el usuario www-data no puede escribir /var/log, por lo que no obtuve ningún resultado allí. Y además, en mi script PHP estaba intentando crear un archivo y escribir algo en él, para hacerlo, se requiere la ruta absoluta, por lo que debería verse así:

dirname(__FILE__) . '/myfile.txt';

Después de estos cambios, todo funciona como se esperaba.

información relacionada