如何使用cron作为root用户重新加载远程服务器的nginx

时间:2016-06-05 06:34:09

标签: ubuntu nginx cron

我正在使用rsync将nginx配置从服务器A中继到服务器B:

0,10 * * * * rsync -avz -O --delete /etc/nginx/sites-available -e "ssh -i /home/ubuntu/key.pem" ubuntu@example.com:/etc/nginx

一旦完成(每10分钟),我需要重新加载远程服务器的配置。如何以root身份在远程服务器上执行service nginx reload

更新

我需要通过ubuntu用户连接然后更改为root然后重新加载的原因是因为ngnix无法重新加载除root之外的任何用户:

nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)
2016/06/05 07:18:27 [warn] 15345#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:1
2016/06/05 07:18:27 [emerg] 15345#0: ipv6only is not supported on addr "0.0.0.0:80", ignored in /etc/nginx/sites-enabled/default:4
2016/06/05 07:18:27 [notice] 15345#0: signal process started
2016/06/05 07:18:27 [alert] 15345#0: kill(987, 1) failed (1: Operation not permitted)

3 个答案:

答案 0 :(得分:1)

在远程服务器上安装sudo(如果尚未安装)。然后将其配置为允许ubuntu用户在没有密码提示的情况下以service nginx reload执行root命令。类似sudoers文件中的以下内容:

ubuntu ALL=(root) NOPASSWD: /usr/sbin/service nginx reload

现在重新加载nginx你只需要运行(来自ubuntu用户):

sudo -n service nginx reload

答案 1 :(得分:0)

如果您以ubuntussh -i /home/ubuntu/key.pem" ubuntu@example.com:/etc/nginx)身份启动nginx服务器,则无需重新加载root

你可以send the reload signal到当前的nginx进程:

ssh -i /home/ubuntu/key.pem" ubuntu@example.com:/etc/nginx -s reload

答案 2 :(得分:0)

您可以通过执行以下操作以root身份执行命令:

systemctl --host root@example.com reload nginx

example.com主机需要PermitRootLogin 由于您不想提示输入密码,您需要像创建rsync一样创建证书并将其粘贴到./ssh /