script – DevHouse Internet Software Development House http://localhost:8080 Desenvolvimento de Sistemas para Internet e Mobile Tue, 23 Jun 2026 08:58:43 +0000 pt-BR hourly 1 https://wordpress.org/?v=4.8.14 Impedir que um Script PHP seja executado ao mesmo tempo no Cron http://localhost:8080/impedir-que-um-script-php-seja-executado-ao-mesmo-tempo-no-cron/ http://localhost:8080/impedir-que-um-script-php-seja-executado-ao-mesmo-tempo-no-cron/#respond Mon, 29 Sep 2014 18:11:53 +0000 http://www.devhouse.com.br/?p=748 Estou construindo um script de sincronia de banco de dados que deve rodar de 5 em 5 minutos na cron do linux. O problema é que ele pode acabar durando mais do que cinco minutos então pesquisando uma forma de evitar que o script seja executado novamente antes que o anterior termine encontrei a solução no link abaixo e coloco aqui com pequenas alterações:

http://abhinavsingh.com/blog/2009/12/how-to-use-locks-in-php-cron-jobs-to-avoid-cron-overlaps/

Crie um arquivo chamado CronHelper.php e adicione o código abaixo (eu coloquei na mesma pasta do meu script cron):

<?php
define('LOCK_DIR', __DIR__ . '/');
define('LOCK_SUFFIX', '.lock');

class CronHelper {
    private static $pid;

    function __construct() {
        
    }

    function __clone() {
        
    }

    private static function isrunning() {
        $pids = explode(PHP_EOL, `ps -e | awk '{print $1}'`);
        if (in_array(self::$pid, $pids)) {
            return TRUE;
        }
        return FALSE;
    }

    public static function lock() {
        global $argv;
        
        $path_parts = pathinfo($argv[0]);

        $lock_file = LOCK_DIR . $path_parts['basename'] . LOCK_SUFFIX;

        if (file_exists($lock_file)) {
            //return FALSE;
            // Is running?
            self::$pid = file_get_contents($lock_file);
            if (self::isrunning()) {
                error_log("==" . self::$pid . "== Já está em progresso...");
                return FALSE;
            } else {
                error_log("==" . self::$pid . "== O job anterior foi interrompido abruptamente...");
            }
        }

        self::$pid = getmypid();
        file_put_contents($lock_file, self::$pid);
        error_log("==" . self::$pid . "== Trava adquirida, processando o job...");
        return self::$pid;
    }

    public static function unlock() {
        global $argv;

        $lock_file = LOCK_DIR . $argv[0] . LOCK_SUFFIX;

        if (file_exists($lock_file)) {
            unlink($lock_file);
        }

        error_log("==" . self::$pid . "== Soltando a trava...");
        return TRUE;
    }

}

Para utilizado coloque todo o código do cron dentro do if:

<?php
require 'CronHelper.php';

if(($pid = cronHelper::lock()) !== FALSE) {
    /*
     * O código do seu cron job vai aqui!
     */

    cronHelper::unlock();
}

?>
]]>
http://localhost:8080/impedir-que-um-script-php-seja-executado-ao-mesmo-tempo-no-cron/feed/ 0
wgetmd5 um shell script que verifica o md5 do download com wget http://localhost:8080/wgetmd5-um-shell-script-que-verifica-o-md5-do-download-com-wget/ http://localhost:8080/wgetmd5-um-shell-script-que-verifica-o-md5-do-download-com-wget/#comments Mon, 20 Aug 2012 18:05:45 +0000 http://www.devhouse.com.br/?p=377 Quando é necessário fazer download de arquivos grandes, como distribuições linux, é prudente não confiarmos totalmente no browser para estes downloads pois alguns pacotes podem ser perdidos sem dar erro no download e depois temos problemas com o sistema sem saber por que.

Então, para treinar a construção de bash scripts e também já automatizar essa pequena tarefa que criei o wgetmd5 que nada mais é a junção do wget com o md5sum para calcular o hash md5 do download e comparar com o arquivo md5 que for indicado como parâmetro.

O uso é:

$ wgetmd5 url_do_arquivo url_do_arquivo_md5

Ex:

$ wgetmd5 ftp://ftp.gimp.org/pub/gimp/v2.8/gimp-2.8.0.tar.bz2 ftp://ftp.gimp.org/pub/gimp/v2.8/gimp-2.8.0.tar.bz2.md5


]]>
http://localhost:8080/wgetmd5-um-shell-script-que-verifica-o-md5-do-download-com-wget/feed/ 3