如何以特定使用者身分在啟動時運行應用程式?

如何以特定使用者身分在啟動時運行應用程式?

有沒有辦法讓應用程式在啟動時以某個使用者帳戶啟動?

例如,我想a_small_app在使用者帳戶bob(位於 group 中bobsgroup)下運行。我要添加一些東西嗎/etc/init.d

注意:我不想啟動應用程式使用者登入後而是當計算機啟動時。

答案1

一種與啟動系統無關的方法。您可以在/etc/rc.local腳本/etc/init.d/...、Upstart 設定檔以及可能的 systemd 設定中使用它。

sudo -u oli /full/path/to/application

該命令將以 root 使用者身分執行,sudo並將下拉至「oli」使用者。顯然,根據您的目的更改使用者和命令。

我應該補充一點,至少有十幾種方法可以做到這一點......但根據我的經驗,它們的效果基本上都是相同的。這是一個使用其節的新貴範例setuid

start on (filesystem and stopped udevtrigger)
stop on runlevel [06]

setuid oli
respawn

exec /full/path/to/application

答案2

不確定舊版本的 Ubuntu,但最近的版本也允許使用@reboot(參見例如在 Ubuntu Wiki 中,向下滾動一點或按 Ctrl+F 即可@重啟)。

當您希望使用者能夠在啟動時運行自己的命令而不必成為 root(或讓有權訪問 root 帳戶的人為他們執行此操作)甚至不必登入時,這可能是有用的選擇。如果有效,則無需登入即可運作。

因此,輸入“bob”,crontab -e然後在開啟的檔案底部新增一行,例如:

# bottom of bob's crontab
@reboot /path/to/a_small_app

如果它不起作用,您可能需要檢查您的環境變量,尤其是PATH.我通常在 crontab 上明確設定HOME和設定。PATH就像是:

# top of bob's crontab
HOME=/home/bob
PATH=/home/bob/.local/bin:/usr/local/bin:/usr/bin:/bin

找出它可能不起作用的原因的技術:

# bottom of bob's crontab
* * * * * /path/to/a_small_app 2>&1 | tee /tmp/a_small_app.log # will run every minute

....然後/tmp/a_small_app.log60 秒後在您最喜歡的編輯器中打開,看看其中是否有任何有用的信息。

今天嘗試@reboot發起一個多路復用器要運行的命令應該存在於會話中,今天我偶然發現了一個頑固的腳本,它最終使用了這個小技巧。結合上面的日誌記錄來顯示它:

@reboot tmux new-session -d -s mysession "bash -c '/path/to/a_small_app 2>&1 | tee /tmp/a_small_app.log'"

答案3

似乎第一個答案在 Ubuntu 14.10 中不再適用。

這就是我在那裡的做法(將其放入 /etc/rc.local 中)

su <username> - -c "<command>"

相關內容