2010-06-10 69 views
12

所以我想能夠上限:部署時不必輸入任何密碼。我已經設置了所有私鑰,所以我可以很好地到達遠程服務器,並且現在通過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

回答

38

我剛剛花了一個小時看着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

2

有一個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