在 PHP 中通过 Cronjob/bash 重新启动 NAMED/bind 服务

Restart NAMED/bind Service via Cronjob/bash in PHP

我只是想根据文件是否存在重新启动named。我整天都被困在这个问题上。

创建 bash 文件的命令:

$this->execute('echo -e "#!/bin/bash\nsudo /sbin/service named reload" >> /var/reload_named.sh');

这是我的 cronjob:

*/1 * * * * cronjob: sudo sh /var/reload_named.sh; rm -f /var/reload_named.sh;

这是 cronjob 运行时发生的情况 (/var/log/cron):

Jul 30 18:34:01 digitalocean CROND[24864]: (root) CMD (cronjob: sudo sh /var/reload_named.sh; rm -f /var/reload_named.sh )
Jul 30 18:34:01 digitalocean CROND[24862]: (root) UNSAFE (”example@digitalocean.com”)

出于某种原因,它说它是 UNSAFE。我试过 运行 并且没有 sudo。

它设法删除了文件但没有重新启动named。我已经尝试了很多其他方法来让它工作。

我试过了(通过大量谷歌搜索):

非常感谢任何帮助

(我在 Centos 6.7 上)

我终于想出了一个办法来做到这一点。这是一种以 root 身份通过 SSH 连接到自身并运行服务命令的方法:

$this->root_execute('service named reload');

    public function root_execute($command = '')
    {
        set_include_path('/path/to/dir/ssh/');
        require_once('Net/SSH2.php');

        $ssh = new Net_SSH2(SSH_HOST);

        if (!$ssh->login(SSH_USER, SSH_PASS)) {
            exit('failed');
        }
        $res = $ssh->exec($command);
        $ssh = null;
        restore_include_path();
        return $res;
    }

(不幸的是,如果 运行 来自 http,则无法使用 HTTPD。php)