Nueva pregunta

Pregunta:

Fecha: 15-12-2015 07:12:54 (En Español)

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
Etiquetas: Cron Jobs - Linux - PHP - Pregunta 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
 
frjcbbae garagebible.com