我想在bash(Ubuntu)中創建一個啓動腳本,該腳本啓動特定用戶下的服務。Bash init - 在特定用戶下啓動服務
除此之外,還有更好的方法嗎?
su - <user> -c "bash -c 'cd $DIR ;<service name>'"
我想在bash(Ubuntu)中創建一個啓動腳本,該腳本啓動特定用戶下的服務。Bash init - 在特定用戶下啓動服務
除此之外,還有更好的方法嗎?
su - <user> -c "bash -c 'cd $DIR ;<service name>'"
或者,你可以用你的/etc/init.d/functions
文件中定義的daemon
功能:
daemon --user=<user> $DIR/program
如果你看看它的語法,你可以做其他事情一樣定義PID文件的位置,設置好的水平,諸如此類的東西。這對於啓動守護進程服務非常有用。通過daemon
啓動的服務可以通過其他功能函數killproc
輕鬆終止。
謝謝。我遇到的問題是,它是一個需要從特定目錄運行的進程,但進程本身實際上不在該目錄中。 –
可以/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機器,但我猜測這個工具將在發行版中可用。
希望這有助於!
我有同樣的問題,我解決它通過
創建的bash腳本,並使用把它/etc/init.d/boot.d中下面的模式
#!/bin/bash
su <user> -c "bash -c '<path to service> $1'"
設置使用以下命令爲腳本運行代碼
sudo update-rc.d <my_scrpit> defaults
一旦在運行代碼中設置了此腳本,重新啓動後,root會運行該腳本,並根據運行模式的狀態將啓動/停止傳遞給腳本$ 1。
如果您想在不重新啓動的情況下測試腳本,則應該以root用戶身份運行該腳本並傳遞服務操作,例如啓動/停止/重新啓動....
root# ./etc/init.d/my_scrpit start
我嘗試將它應用於'/ etc/rc.local'中的Ubuntu 16.04,但我的測試腳本沒有執行: 'su -l user -c「bash/home/user/bin/start_check」'。該腳本預計會寫入一些日誌。 – beemaster
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
其他選項的詳細信息,如果答案回答你的問題,請接受它。 – Carl