我正在使用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)
答案 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)
如果您以ubuntu
(ssh -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 /