2011-09-19 44 views
11

我想在bash(Ubuntu)中創建一個啓動腳本,該腳本啓動特定用戶下的服務。Bash init - 在特定用戶下啓動服務

除此之外,還有更好的方法嗎?

su - <user> -c "bash -c 'cd $DIR ;<service name>'" 
+0

其他選項的詳細信息,如果答案回答你的問題,請接受它。 – Carl

回答

4

或者,你可以用你的/etc/init.d/functions文件中定義的daemon功能:

daemon --user=<user> $DIR/program 

如果你看看它的語法,你可以做其他事情一樣定義PID文件的位置,設置好的水平,諸如此類的東西。這對於啓動守護進程服務非常有用。通過daemon啓動的服務可以通過其他功能函數killproc輕鬆終止。

+0

謝謝。我遇到的問題是,它是一個需要從特定目錄運行的進程,但進程本身實際上不在該目錄中。 –

2

可以/etc/init.d/下創建一個腳本說your_service_name,以最小的內容

#!/bin/sh
su - <user> -c "bash -c 'cd $DIR ;<service name>'"

提供相應權限的腳本。現在在所需的/etc/rc<run_level>.d目錄中使用update-rc.d命令爲您的腳本創建一個軟鏈接,以便在系統以所提及的運行級別啓動時運行該腳本。
請參考/etc/init.d/下的腳本作爲參考&請通過/etc/init.d/README瞭解有關編寫腳本的更多細節。 update-rc.d的手冊頁也有助於瞭解update-rc.d的使用情況。這絕對適用於我使用的Ubuntu機器,但我猜測這個工具將在發行版中可用。
希望這有助於!

1

我有同樣的問題,我解決它通過

  1. 創建的bash腳本,並使用把它/etc/init.d/boot.d中下面的模式
    #!/bin/bash
    su <user> -c "bash -c '<path to service> $1'"

  2. 設置使用以下命令爲腳本運行代碼
    sudo update-rc.d <my_scrpit> defaults

一旦在運行代碼中設置了此腳本,重新啓動後,root會運行該腳本,並根據運行模式的狀態將啓動/停止傳遞給腳本$ 1。
如果您想在不重新啓動的情況下測試腳本,則應該以root用戶身份運行該腳本並傳遞服務操作,例如啓動/停止/重新啓動....
root# ./etc/init.d/my_scrpit start

+0

我嘗試將它應用於'/ etc/rc.local'中的Ubuntu 16.04,但我的測試腳本沒有執行: 'su -l user -c「bash/home/user/bin/start_check」'。該腳本預計會寫入一些日誌。 – beemaster

20

Ubuntu使用start-stop-daemon已支持此功能。適當

sudo cp /etc/init.d/skeleton /etc/init.d/mynewservice

編輯mynewservice:

從/etc/init.d中使用的框架文件。

以下參數添加到調用啓動 - 停止守護線:

--chuid username:group

例子:

變化

start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \

start-stop-daemon --start --quiet --chuid someuser:somegroup --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \

最後,註冊您的服務,並啓動它:

update-rc.d mynewservice defaults 99 && service mynewservice start

有關啓停守護here

相關問題