重新启动nginx没有sudo?

问题描述:

所以我想能够上限:部署时不必输入任何密码。我已经设置了所有私钥,所以我可以很好地到达远程服务器,并且现在通过ssh使用svn,因此没有密码。重新启动nginx没有sudo?

我有最后一个问题,我需要能够重新启动nginx。现在我有sudo /etc/init.d/nginx重新加载。这是一个问题b/c它使用capistrano密码,我刚刚删除b/c我正在使用密钥。有关如何重新启动nginx w \ out密码的任何想法?

+0

这种类型的问题将是更好的地址http://www.serverfault.com。另外,请查看http://courtesan.com/sudo/man/sudoers.html#nopasswd_and_passwd以了解如何使用sudo删除某些命令的密码。 – randombits 2010-06-10 01:24:21

+0

你确实需要重新启动Nginx吗?如果您使用Passenger服务Rack应用程序(例如Rails),则在release目录中运行'touch tmp/restart.txt'应该让Passenger知道它需要重新启动。 – Leo 2013-10-27 12:42:40

我刚刚花了一个小时看着sudoer通配符等试图解决这个确切的问题。事实上,你真正需要的是一个重启nginx的root可执行脚本。

一下添加到在/ etc/sudoers文件

username hostname ALL=NOPASSWD: /path/to/script 

写脚本根

#! /bin/bash 
/bin/kill -HUP `cat /var/run/nginx.pid` 

使脚本可执行

测试。

sudo /path/to/script 
+1

这是...美丽!多么惊人的解决方案!我一直在使用capistrano两年,并没有意识到这是可能的。 – ndbroadbent 2012-06-15 11:08:25

+0

@ nathan.f77这正是我所需要的。 – phoolish 2012-10-22 07:54:29

+3

如果有人破坏运行该应用程序的帐户,他们是否可以编辑此脚本并以root身份运行任意命令? – 2013-04-16 00:33:44

有一个better answer on Stack Overflow不涉及编写自定义脚本:

最好的做法是使用/etc/sudoers.d/myuser

/etc/sudoers.d/文件夹可以包含多个文件,使用户 调用东西使用sudo而不是根。

该文件通常包含一个用户以及用户 可以运行而不必指定密码的命令列表。

说明:

在所有的命令,与您要使用nginx的重新启动没有sudo您的用户名替换为myuser。为用户

  1. 打开sudoers文件:

    $ sudo visudo -f /etc/sudoers.d/myuser 
    
  2. 编辑器将打开。你粘贴下面的行。这将允许用户运行nginx的启动,重新启动和停止:

    $ myusername ALL=(ALL) NOPASSWD: /usr/sbin/service nginx start,/usr/sbin/service nginx stop,/usr/sbin/service nginx restart 
    
  3. 保存击中CTRL +Ø。它会询问您要保存的位置,只需按输入即可确认默认设置。然后退出编辑器,按ctrl + x

现在你可以重新启动(并启动和停止)nginx没有密码。我们来试试吧。

  1. 打开新的会话(否则,你可能根本不会被要求为你的sudo密码,因为它没有超时):

    $ ssh [email protected] 
    
  2. 停止nginx的

    $ sudo /usr/sbin/service nginx stop 
    
  3. 通过检查您的网站或正在运行确认nginx已停止ps aux | grep nginx

  4. 开始nginx的

    $ sudo /usr/sbin/service nginx start 
    
  5. 确认Nginx已经通过检查您的网站或运行ps aux | grep nginx

PS开始:确保使用sudo /usr/sbin/service nginx start|restart|stop,而不是sudo service nginx start|restart|stop

+0

伟大的解决方案。看起来你可以忽略'/ usr/sbin /'。至少它在我的env没有。 – 2018-01-10 18:34:37