2011-01-22 11 views
12

¿Cómo configurar una tarea cron a través de PHP (no CPanel)?¿Cómo configurar una tarea cron a través de PHP (no CPanel)?

+1

El primer problema al que se ejecutará es el permiso para hacerlo. – Orbling

+0

buscando da goog obtienes muchos ejemplos de ejecutar php a través de un trabajo cron pero no al revés. Me interesaría obtener una respuesta a esta pregunta también. – Fatmuemoo

+0

http://stackoverflow.com/questions/2264756/cron-jobs-using-php – Abhijit

Respuesta

8

mayoría de los sistemas Linux con crond instalados proporciona unos directorios que se pueden configurar trabajos con:

/etc/cron.d/ 
/etc/cron.daily/ 
/etc/cron.weekly/ 
/etc/cron.monthly/ 
... 

La idea aquí es crear un archivo en uno de estos directorios. Tendrá que establecer los permisos/propiedad adecuados para esos (o uno de esos) directorios para que el usuario que inicie el script PHP pueda escribir en él (usuario de Apache si es un script web, o el usuario de CLI si se usa CLI).

Lo más fácil es crear un archivo vacío, asignarle el permiso/propiedad adecuado y hacer que el script PHP lo agregue/modifique.

Por ejemplo:

$ touch /etc/cron.d/php-crons 
$ chown www-data /etc/cron.d/php-crons 

Luego, en PHP:

$fp = fopen('/etc/cron.d/php-crons', 'a'); 
fwrite($fp, '* 23 * * * echo foobar'.PHP_EOL); 
fclose($fp); 
-2

Hay un embargo sobre el uso de PHP para editar crontabs que ha estado en vigor desde 2004. Es posible que no se le permitirá Para hacer esto, si vives fuera de los Estados Unidos, verifica con la agencia de tu gobierno local.

Pero en serio, siempre se puede llamar a "crontab -" con una llamada al sistema. Si necesita hacer esto para un usuario que no sea el servidor web, necesitará algo de magia ssh o sudo. Pero todo parece una mala idea.

2

Si lo que estás recibiendo es añadir dinámicamente un montón de puestos de trabajo para formar crontab su aplicación, una mejor manera de hacerlo es añadir manualmente trabajo de una sola cron:

php -f /path/to/your/runner.php 

Guarde sus puestos de trabajo que serían agregando cron manualmente en una tabla (o una tabla por tipo de tarea), y luego haga que su corredor revise las tablas cada minuto/hora/día/lo que sea y ejecute todas las que se deben ejecutar en ese momento.

0

Encontrar archivo crontab no es fácil en alojamiento compartido y no hay certeza de que cron leerá ese archivo de nuevo, mientras que ya se está ejecutando. En realidad, la mejor manera es usar el comando corntab.

Si no tiene acceso al shell puede usar, por ejemplo, PHPShell. Prueba esto.

  • Uplode un archivo txt a través de FTP, con puestos de trabajo en fomat crontab por ejemplo

    5 * * * * /some/file/to/run.sh > /dev/null

(recuerda poner una nueva línea al final de la línea)

  • Inicie sesión en su PHPShell y ejecute

    crontab uploded_filename.txt

  • Recuerde que cambiar los permisos de archivo

    chmod 775 uploded_filename.txt

  • Compruebe sus trabajos Cron usando

    crontab -l

Saludos

Cuestiones relacionadas