在 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。我已经尝试了很多其他方法来让它工作。
我试过了(通过大量谷歌搜索):
- 运行 在 php
中执行('service named restart')
- 正在创建一个 .c 文件并添加一个从 php
运行它的用户
- 运行
service named restart
直接在crontab -e
- 尝试使用 sudo
对 运行 进行不同的修改
- 尝试将 apache 用户添加到 sudo(仍然失败)
非常感谢任何帮助
(我在 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)
我只是想根据文件是否存在重新启动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。我已经尝试了很多其他方法来让它工作。
我试过了(通过大量谷歌搜索):
- 运行 在 php 中执行('service named restart')
- 正在创建一个 .c 文件并添加一个从 php 运行它的用户
- 运行
service named restart
直接在crontab -e
- 尝试使用 sudo 对 运行 进行不同的修改
- 尝试将 apache 用户添加到 sudo(仍然失败)
非常感谢任何帮助
(我在 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)