Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Crear y elimi ar cron job

Estas en el tema de Crear y elimi ar cron job en el foro de PHP en Foros del Web. Es posible crear y eliminar cron jobs desde php?este php estaria en otro cron jobs. O la manera mas segura de crear y eliminar cron ...
  #1 (permalink)  
Antiguo 05/01/2017, 03:30
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 12 años, 7 meses
Puntos: 5
Crear y elimi ar cron job

Es posible crear y eliminar cron jobs desde php?este php estaria en otro cron jobs.
O la manera mas segura de crear y eliminar cron jobs?
Los quiero crear automaticamente.
Saludos.
  #2 (permalink)  
Antiguo 05/01/2017, 09:30
 
Fecha de Ingreso: octubre-2009
Mensajes: 305
Antigüedad: 14 años, 5 meses
Puntos: 29
Respuesta: Crear y elimi ar cron job

depende del sistema operativo, en GNU/Linux puedes usar crontab
  #3 (permalink)  
Antiguo 06/01/2017, 04:41
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 12 años, 7 meses
Puntos: 5
Respuesta: Crear y elimi ar cron job

No encuentro como hacerlo con crontab.
Php puede crear un cronJob y tambien eliminarlo?
Necesitaria un poco de informacion de como se hace.
Gracias
  #4 (permalink)  
Antiguo 06/01/2017, 06:46
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 4 meses
Puntos: 154
Respuesta: Crear y elimi ar cron job

Hola primary,

Google es tu amigo

Espero que te sirva...
  #5 (permalink)  
Antiguo 06/01/2017, 07:27
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 12 años, 7 meses
Puntos: 5
Respuesta: Crear y elimi ar cron job

Cita:
Iniciado por rbczgz Ver Mensaje
Hola primary,

Google es tu amigo

Espero que te sirva...
Gracias me lo mirare con calma.
La verdad que me valdria algo como comentar y descomentar la tarea ya que debo utilizarla de vez en cuando.
Es recomendable lo de comentar crontab desde php?
Igual al haber varias tareas no se como comentar la que no necesite.
Bueno me leere el tutorial que parece interesante, gracias.
  #6 (permalink)  
Antiguo 06/01/2017, 08:26
 
Fecha de Ingreso: octubre-2009
Mensajes: 305
Antigüedad: 14 años, 5 meses
Puntos: 29
Respuesta: Crear y elimi ar cron job

puedes con php modificar el archivo de crontab, la idea es que manipules la linea de tu tarea
  #7 (permalink)  
Antiguo 06/01/2017, 14:34
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 12 años, 7 meses
Puntos: 5
Respuesta: Crear y elimi ar cron job

Como deberia modificar en crontab desde php.
El cron jobs siempre es el mismo por eso lo de comentarlo o descomentarlo.
Pero que opinan de hacerlo asi?es seguro y eso?
Saludos.
  #8 (permalink)  
Antiguo 09/01/2017, 08:16
 
Fecha de Ingreso: octubre-2009
Mensajes: 305
Antigüedad: 14 años, 5 meses
Puntos: 29
Respuesta: Crear y elimi ar cron job

con fopen ¿cual mas?
  #9 (permalink)  
Antiguo 12/01/2017, 14:49
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 12 años, 7 meses
Puntos: 5
Respuesta: Crear y elimi ar cron job

al final opté por crear las tareas con crontab como comentaron los compañero, estoy probando de crear la tarea con crontab y la libreria sshe de pecl pero no se muy bien si el comando es correcto:
Código PHP:
Ver original
  1. $stream = ssh2_exec($connection, 'crontab -e 0 22 * * * /path/cron/archivo.php');

seria para que se ejecute un archivo php cada dia a las 22h, pero no me lo crea se que es el comando que esta mal si pongo un comando para ver las tareas crontab -e me dice que no tengo.

como seria el comando?

probe la clase del enlace que dijo rbczgz pero tampoco me funciono lo hice asi:

Código PHP:
Ver original
  1. $crontab = new Ssh2_crontab_manager('dominio.com', '22', 'user', 'password');
  2. $crontab->append_cronjob('0 22 * * * /path/cron/archivo.php');

y nada que estoy haciendo mal?
saludos

Última edición por primary; 13/01/2017 a las 07:27
  #10 (permalink)  
Antiguo 13/01/2017, 07:34
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 12 años, 7 meses
Puntos: 5
Respuesta: Crear y elimi ar cron job

Estube buscando en google y no encontre nada, nadie me puede decir como usar la clase que comento el compañero para añadir tarea o quitarlas necesito ejeutar esta ruta:
/path/cron/archivo.php

he probado de mil maneras
Código PHP:
Ver original
  1. $crontab->append_cronjob('0 22 * * * php /path/cron/archivo.php');

tampoco lo consigo con mi pequella funcion usando ssh2
Código PHP:
Ver original
  1. ssh2_exec($connection, '0 22 * * * php /path/cron/archivo.php');

nadie me puede decir como deben ser los comandos?
  #11 (permalink)  
Antiguo 13/01/2017, 08:01
 
Fecha de Ingreso: octubre-2010
Mensajes: 31
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Crear y elimi ar cron job

¿Necesitas un cronjob para ejecutar un archivo php el dia 22?. ¿Quiz'a podrias utilizar directamente php sin tanto lio?...

Código PHP:
Ver original
  1. if (date('d')=22){
  2. include 'archivo.php';
  3. }
  #12 (permalink)  
Antiguo 13/01/2017, 08:06
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 12 años, 7 meses
Puntos: 5
Respuesta: Crear y elimi ar cron job

Hola no es el dia 22 es la hora, pero igual es en modo ejemplo, necesito crear la tarea desde php.

probe este comando:

echo "00 22 * * * php /path/cron/archivo.php"
>> /path/cron/user

no me da error pero no me crea nada.
  #13 (permalink)  
Antiguo 13/01/2017, 08:15
(Desactivado)
 
Fecha de Ingreso: julio-2008
Ubicación: Muchas noches sin dormir
Mensajes: 211
Antigüedad: 15 años, 8 meses
Puntos: 7
Respuesta: Crear y elimi ar cron job

¿Exactamente que es lo que quieres o pretendes hacer?

Si quieres ejecutar un archivo en php a cierta hora en un servidor Linux deberás de usar los cronjobs mediante crontab.

No hay más historia.
  #14 (permalink)  
Antiguo 13/01/2017, 08:18
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 12 años, 7 meses
Puntos: 5
Respuesta: Crear y elimi ar cron job

Cita:
Iniciado por fvillalba Ver Mensaje
¿Exactamente que es lo que quieres o pretendes hacer?

Si quieres ejecutar un archivo en php a cierta hora en un servidor Linux deberás de usar los cronjobs mediante crontab.

No hay más historia.
si pero en algunos periodos de tiempos debo parar el php y quiero hacerlo automaticamente, no encuentro como ejecutar el comando ese es mi problema.

gracias en el interes en ayudarme por eso.
saludos
  #15 (permalink)  
Antiguo 13/01/2017, 08:22
(Desactivado)
 
Fecha de Ingreso: julio-2008
Ubicación: Muchas noches sin dormir
Mensajes: 211
Antigüedad: 15 años, 8 meses
Puntos: 7
Respuesta: Crear y elimi ar cron job

PD: En un servidor dedicado administrado por una empresa seria no vas a poder ejecutar comandos ssh a través de php porque te vas a encontrar las funciones bloqueadas en las disable_functions de php.

¿Por que necesitas detener el php? Alucino...

Última edición por fvillalba; 13/01/2017 a las 08:30
  #16 (permalink)  
Antiguo 13/01/2017, 08:39
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 12 años, 7 meses
Puntos: 5
Respuesta: Crear y elimi ar cron job

Cita:
Iniciado por fvillalba Ver Mensaje
PD: En un servidor dedicado administrado por una empresa seria no vas a poder ejecutar comandos ssh a través de php porque te vas a encontrar las funciones bloqueadas en las disable_functions de php.

¿Por que necesitas detener el php? Alucino...
saber usar la clase que comento el amigo rbczgz?

yo no almenos no me funciona, solo quiero saber que comando se debe usar nada mas.
  #17 (permalink)  
Antiguo 13/01/2017, 09:06
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 4 meses
Puntos: 154
Respuesta: Crear y elimi ar cron job

Hola primary,

Solo decirte que yo únicamente hice la búsqueda, no analicé nada ni revisé a fondo los resultados.

Espero que puedas resolverlo.
  #18 (permalink)  
Antiguo 14/01/2017, 05:26
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 5 meses
Puntos: 123
Respuesta: Crear y elimi ar cron job

Por que no crear el cron normal y corriente y almacenar en la base de datos o en algún archivo una variable para determinar si se ejecuta o no una determinada función, dentro del php que ejecuta el cron?

No tiene mucho sentido andar modificando el cron constantemente.
__________________
Unset($vida['malRollo']);
  #19 (permalink)  
Antiguo 16/01/2017, 12:09
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 7 meses
Puntos: 2237
Respuesta: Crear y elimi ar cron job

Por favor, mantengan el buen trato entre usuarios.

fvillalba: Si no te entienden, o no te quieren entender, olvídate del tema y ahórrate un mal rato.

primary: Si ves que hay una ofensa, usa el ícono para reportar el mensaje y no respondas en la misma forma, eso no te va a ayudar a encontrar la solución a tu problema.
__________________
- León, Guanajuato
- GV-Foto
  #20 (permalink)  
Antiguo 20/01/2017, 09:03
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 12 años, 7 meses
Puntos: 5
Respuesta: Crear y elimi ar cron job

Cita:
Iniciado por Triby Ver Mensaje
Por favor, mantengan el buen trato entre usuarios.

fvillalba: Si no te entienden, o no te quieren entender, olvídate del tema y ahórrate un mal rato.

primary: Si ves que hay una ofensa, usa el ícono para reportar el mensaje y no respondas en la misma forma, eso no te va a ayudar a encontrar la solución a tu problema.
hola, tienes toda la razón no lo haré mas os pido mil perdones.


Volviendo al tema yo tenia la curiosidad no necesidad de aprender a gestionar tareas programadas en linux y tenia muchas dudas sobre todo en los comandos, gracias a los compañeros y leyendo un poco entendí mi curiosidad de como se hace, cree una sencilla clase para esto y es funcional porque la probé.

Primero decir que esta clase seria para gestionar las tareas desde el mismo servidor que están para eso usare la función exec(), si se quiere gestionar desde otro servidor se debería usar ssh2_exec por ejemplo y creando una clave publica encriptada, pero no quiero hablar mucho de la seguridad porque mi post no era sobre ello pero si decir que para la clase se debe usar un usuario con los permisos minimos y la función exec limitarla solo para los directorios necesarios.

no me enrollo mas y pongo la clase sirve para eliminar, crear, modificar el tiempo de la tarea y eliminar todas.

Código PHP:
Ver original
  1. <?php
  2. class ManagerTasks {
  3.     //recuperar tareas con array de salida
  4.     private function recoverTasks(){
  5.         exec("crontab -l",$output);
  6.         return $output;
  7.     }
  8.     //convertir array de las tareas a cadena
  9.     private function convertString($chores){
  10.         $str=implode("\n",$chores);
  11.         return trim($str);
  12.     }
  13.     //verificar si existe la tarea para eliminar o borrar o editar posteriormente
  14.     private function exists($chores,$serverTask){
  15.         if(in_array($serverTask,$chores)){
  16.             return true;
  17.         }
  18.         return false;
  19.     }
  20.     //crear nueva tarea
  21.     public function createTask($serverTask){
  22.         $chores=$this->recoverTasks();
  23.         $exists=$this->exists($chores,$serverTask);
  24.         if($exists===false){
  25.             $chores[]=$serverTask;
  26.             return $this->saveTasks($chores);
  27.         }
  28.         echo"error: la tarea ya existe";
  29.     }
  30.     //eliminar una tarea existente
  31.     public function deleteTask($serverTask){
  32.         $chores=$this->recoverTasks();
  33.         $exists=$this->exists($chores,$serverTask);
  34.         if($exists===true){
  35.             if(count($chores)==1){
  36.                 //al tener solo una eliminamos todas
  37.                 return $this->removeAll();
  38.             }else{
  39.                 foreach($chores as $key => $value){
  40.                     if($serverTask==$value){
  41.                         unset($chores[$key]);
  42.                         break;
  43.                     }
  44.                 }
  45.                 return $this->saveTasks($chores);
  46.             }
  47.         }
  48.         echo"error:la tarea no existe";
  49.     }
  50.     //editar el tiempo de tarea: parametros (ruta del script,tiempo actual,tiempo nuevo)
  51.     //con tiempo me refiero a cuando se ejecuta la tarea ejemplo '*/30 * * * *' cada 30min
  52.     public function editTaskTime($route,$currentTime,$newTime){
  53.         $chores=$this->recoverTasks();
  54.         foreach($chores as $key => $line){
  55.             if(stristr($line,$route)!==false){
  56.                 $new=str_replace($currentTime,$newTime,$line);
  57.                 $chores[$key]=$new;
  58.                 return $this->saveTasks($chores);
  59.             }
  60.         }
  61.     }
  62.     //guardar cambios despues de crear, editar o eliminar una tarea
  63.     private function saveTasks($chores){
  64.         $choresString=$this->convertString($chores);
  65.         exec("crontab -l | echo '$choresString' | crontab -",$output,$status);
  66.         if($status===0){
  67.             echo"correcto: cambios guardados";
  68.         }else{
  69.             echo"error: no se han guardado los cambios";
  70.         }
  71.     }
  72.     //eliminar todas las tareas
  73.     public function removeAll(){
  74.         exec("crontab -r",$output,$status);
  75.         if($status===0){
  76.             echo"correcto: todas tareas eliminadas";
  77.         }else{
  78.             echo"error: no se han eliminado las tareas";
  79.         }
  80.     }
  81. }
  82. //creo la instancia para probar la clase desde el interprete de php en linea de comandos pondre ejemplos comentados
  83. $task=new ManagerTasks();
  84.  
  85.  
  86. //estos serian unos ejemplos
  87. /*
  88. //crear tareas nuevas
  89. echo $task->createTask("@hourly php '/home/user/script.php");
  90. echo $task->createTask("@hourly php '/home/user/script2.php");
  91. echo $task->createTask("@hourly php '/home/user/script3.php");
  92. //eliminar una tarea
  93. echo $task->deleteTask("@hourly php '/home/user/script2.php");
  94. //editar tiempo de una tarea que se ejecutaba cada hora ahora se debera ejecutar cada 45 min
  95. */
  96. //echo $task->editTaskTime("/home/user/script.php","@hourly","*/45 * * * *");
  97. //eliminar todas las tareas
  98. //echo $task->removeAll();
  99. ?>

esta es la salida es una clase sencilla pero funciona perfecta

[user_cron@server myCron]$ crontab -l
no crontab for user_cron
[user_cron@server myCron]$ php -a
Interactive shell

php > require_once('/home/user_cron/myCron/clase_manager_cron.php');$task->createTask("@hourly php /path/user/script.php");echo"\n";
no crontab for user_cron
no crontab for user_cron
correcto: cambios guardados
php > require_once('/home/user_cron/myCron/clase_manager_cron.php');$task->createTask("@hourly php /path/user/script2.php");echo"\n";
correcto: cambios guardados
php > require_once('/home/user_cron/myCron/clase_manager_cron.php');$task->createTask("@hourly php /path/user/script3.php");echo"\n";
correcto: cambios guardados
php > exit
[user_cron@server myCron]$ crontab -l
@hourly php /path/user/script.php
@hourly php /path/user/script2.php
@hourly php /path/user/script3.php
[user_cron@server myCron]$ php -a
Interactive shell

php > require_once('/home/user_cron/myCron/clase_manager_cron.php');$task->deleteTask("@hourly php /path/user/script2.php");echo"\n";
correcto: cambios guardados
php > exit
[user_cron@server myCron]$ crontab -l
@hourly php /path/user/script.php
@hourly php /path/user/script3.php
[user_cron@server myCron]$ php -a
Interactive shell

php > require_once('/home/user_cron/myCron/clase_manager_cron.php');$task->editTaskTime("/path/user/script3.php","@hourly","*/45 * * * *");echo"\n";
correcto: cambios guardados
php > exit
[user_cron@server myCron]$ crontab -l
@hourly php /path/user/script.php
*/45 * * * * php /path/user/script3.php
[user_cron@server myCron]$ php -a
Interactive shell

php > require_once('/home/user_cron/myCron/clase_manager_cron.php');$task->removeAll();echo"\n";
correcto: todas tareas eliminadas
php > exit
[user_cron@server myCron]$ crontab -l
no crontab for user_cron
[user_cron@server myCron]$


saludos
  #21 (permalink)  
Antiguo 20/01/2017, 11:33
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 4 meses
Puntos: 154
Respuesta: Crear y elimi ar cron job

Hola primary,

¡¡Enhorabuena!! Al final lo has logrado. No olvides marcar el tema como solucionado por si alguien viene buscando una solución a un problema como el tuyo, que sepa que aquí la encontrará (y muy buena )

Etiquetas: cron, job
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:00.