Pregunta:
Fecha: 15-12-2015 07:12:54
(En Español)
Les comento que necesito crear tareas programadas (los famosos crontab) , pero quiero hacerlo desde php osea que desde php cree los crontab en el servidor
saludos Votos: 3 - Respuestas: 2 - Vistas: 30 Compartir en: Google Facebook Twitter LinkedIn Link
CRON JOBS desde PHP[Resuelta]
Hola comunidad espero me puedan ayudar.Les comento que necesito crear tareas programadas (los famosos crontab) , pero quiero hacerlo desde php osea que desde php cree los crontab en el servidor
saludos Votos: 3 - Respuestas: 2 - Vistas: 30 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 15-12-2015 07:33:36 Hola Juan, dependerá en gran medida si tienes acceso a ejecutar scripts de línea de comandos desde php, verifíca si puedes ejecutar shell_exec de PHP.
Documentación oficial: http://php.net/manual/es/function.shell-exec.php
Luego deberás ejecutar los comandos linux tradicionales, por medio de shell_exec, para crear los famosos crons.
Aquí tienes una web con algunos ejemplos de creación de crons http://blog.desdelinux.net/cron-crontab-explicados/.
Si implementas esta solución, estaría bueno que luego compartas tu experiencia.
Saludos, Votos: 3 - Link respuesta -
Fecha: 15-12-2015 08:19:48 Hola fenandooo muy bueno lo expuestoo te comento que encontre un ejemplo de lo que mencionas
shell_exec pero como sabe que para ello se tiene q instalar algunas cosas extras como esto
dejo link
PHP libssh2 Installation / Configuration
posterior a esto tambien tengo q tener un usuario ssh el cual no lo dispongo por el momento , pero que en si nos dificil crearlo , anteriormente trabaje con crontab en un proyecto anterior el cual creaba los crontab en el mismo servidor y el paso era lo siguiente tener un usuario ssh el cual era para loguearme
mediante putty hacia eso
PuTTY es un cliente SSH, Telnet, rlogin, y TCP raw con licencia libre. Disponible originalmente sólo para Windows, ahora también está disponible en varias plataformas Unix, y se está desarrollando la versión para Mac OS clásico y Mac OS X. Otra gente ha contribuido con versiones no oficiales para otras plataformas, tales como Symbian para teléfonos móviles. Es software beta escrito y mantenido principalmente por Simon Tatham, open source y licenciado bajo la Licencia MIT.
te comento que encontre una libreria muy bueno q no necesita de un usuario ssh
dejo codigo fuente de descarga
https://github.com/MediovskiTechnology/php-crontab-manager
te comento que puse en practica y funciona
expongo mi codigo
demo.php
<?php require 'CrontabManager.php'; use php\manager\crontab\CrontabManager; $crontab = new CrontabManager(); $job = $crontab->newJob(); $job->on('* * * * *'); $job->onMinute('20-30')->doJob("php /home/delhelpe/public_html/Scripts/recordatorio.php"); $crontab->add($job); $crontab->save(); echo "eso"; ?>
aqui estoy creando un crontab que se ejecute cada 20 minutos como veran estoy usando esto
$job->onMinute('20')
quize crear un cron tab que tenga hora y munutos para ello modifique mi codigo a esto expongo codigo
<?php require 'CrontabManager.php'; use php\manager\crontab\CrontabManager; $crontab = new CrontabManager(); $job = $crontab->newJob(); $job->on('* * * * *'); $job->onHour("15"); $job->onMinute('20'); $job->doJob("php /home/delhelpe/public_html/Scripts/recordatorio.php"); $crontab->add($job); $crontab->save(); ?>
pero me sale error :)
adjunto otro libreria esto necesita de un usuario ssh
<?php Class Ssh2_crontab_manager { private $connection; private $path; private $handle; private $cron_file; function __construct($host=NULL, $port=NULL, $username=NULL, $password=NULL) { $path_length = strrpos(__FILE__, "/"); $this->path = substr(__FILE__, 0, $path_length) . '/'; $this->handle = 'crontab.txt'; $this->cron_file = "{$this->path}{$this->handle}"; try { if (is_null($host) || is_null($port) || is_null($username) || is_null($password)) throw new Exception("The host, port, username and password arguments must be specified!"); $this->connection = @ssh2_connect($host, $port); if ( ! $this->connection) throw new Exception("The SSH2 connection could not be established."); $authentication = @ssh2_auth_password($this->connection, $username, $password); if ( ! $authentication) throw new Exception("Could not authenticate '{$username}' using pasword: '{$password}'."); } catch (Exception $e) { $this->error_message($e->getMessage()); } } public function exec() { $argument_count = func_num_args(); try { if ( ! $argument_count) throw new Exception("There is nothing to exececute, no arguments specified."); $arguments = func_get_args(); $command_string = ($argument_count > 1) ? implode(" && ", $arguments) : $arguments[0]; $stream = @ssh2_exec($this->connection, $command_string); if ( ! $stream) throw new Exception("Unable to execute the specified commands: <br />{$command_string}"); } catch (Exception $e) { $this->error_message($e->getMessage()); } return $this; } public function write_to_file($path=NULL, $handle=NULL) { if ( ! $this->crontab_file_exists()) { $this->handle = (is_null($handle)) ? $this->handle : $handle; $this->path = (is_null($path)) ? $this->path : $path; $this->cron_file = "{$this->path}{$this->handle}"; $init_cron = "crontab -l > {$this->cron_file} && [ -f {$this->cron_file} ] || > {$this->cron_file}"; $this->exec($init_cron); } return $this; } public function remove_file() { if ($this->crontab_file_exists()) $this->exec("rm {$this->cron_file}"); return $this; } public function append_cronjob($cron_jobs=NULL) { if (is_null($cron_jobs)) $this->error_message("Nothing to append! Please specify a cron job or an array of cron jobs."); $append_cronfile = "echo '"; $append_cronfile .= (is_array($cron_jobs)) ? implode("\n", $cron_jobs) : $cron_jobs; $append_cronfile .= "' >> {$this->cron_file}"; $install_cron = "crontab {$this->cron_file}"; $this->write_to_file()->exec($append_cronfile, $install_cron)->remove_file(); return $this; } public function remove_cronjob($cron_jobs=NULL) { if (is_null($cron_jobs)) $this->error_message("Nothing to remove! Please specify a cron job or an array of cron jobs."); $this->write_to_file(); $cron_array = file($this->cron_file, FILE_IGNORE_NEW_LINES); if (empty($cron_array)) { $this->remove_file()->error_message("Nothing to remove! The cronTab is already empty."); } $original_count = count($cron_array); if (is_array($cron_jobs)) { foreach ($cron_jobs as $cron_regex) $cron_array = preg_grep($cron_regex, $cron_array, PREG_GREP_INVERT); } else { $cron_array = preg_grep($cron_jobs, $cron_array, PREG_GREP_INVERT); } return ($original_count === count($cron_array)) ? $this->remove_file() : $this->remove_crontab()->append_cronjob($cron_array); } public function remove_crontab() { $this->remove_file()->exec("crontab -r"); return $this; } private function crontab_file_exists() { return file_exists($this->cron_file); } private function error_message($error) { die("<pre style='color:#EE2711'>ERROR: {$error}</pre>"); } }
ejemplo de como generar un crontab
$crontab = new Ssh2_crontab_manager('11.11.111.111', '22', 'my_username', 'my_password'); $crontab->append_cronjob('20 15 * * 6 php /home/delhelpe/public_html/Scripts/recordatorio.php');
saludos Votos: 3 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión