【问题标题】:Restart NAMED/bind Service via Cronjob/bash in PHP在 PHP 中通过 Cronjob/bash 重启 NAMED/bind 服务
【发布时间】:2016-08-06 21:34:11
【问题描述】:

我只是想根据文件是否存在重新命名命名。我整天都被困在这上面。

创建 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 运行。

它设法删除文件但不重新启动命名。我已经尝试过很多其他方法来让它发挥作用。

我已经尝试过(通过大量的谷歌搜索):

  • 在 php 中运行 exec('service named restart')
  • 创建一个 .c 文件并添加一个从 php 运行它的用户
  • 直接在crontab -e 中运行service named restart
  • 尝试了使用 sudo 运行它的不同变体
  • 尝试将 apache 用户添加到 sudo(仍然失败)

非常感谢任何帮助

(我在 Centos 6.7 上)

【问题讨论】:

  • 您创建了一个可作为非特权用户写入的脚本并通过sudo 以特权权限运行它?这当然是不安全的。
  • 我根本无法让它运行。为了从 php 脚本重新命名,需要更改什么?我觉得好像我已经用尽了一切。当然,这应该是一件简单的事情。
  • 如果有管理(sudo)权限,你还应该有权限从 PHP 运行(配置)exec/system/passthru。可以让事情变得更容易。 stackoverflow.com/questions/732832/…
  • 谢谢,除了那个passthru,我已经尝试了所有方法,但似乎仍然失败。 ://

标签: php bash service bind crontab


【解决方案1】:

我终于找到了一种方法来做到这一点。这是一种以 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 .php 运行,则不适用于 HTTPD)

【讨论】:

    猜你喜欢
    • 2013-02-18
    • 2016-11-26
    • 2017-06-24
    • 2014-01-19
    • 2018-10-09
    • 2016-11-25
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多