如何以特定用户身份在启动时运行应用程序?

如何以特定用户身份在启动时运行应用程序?

有没有办法让某个应用程序在某个用户帐户下启动时启动?

例如,我希望a_small_app在用户帐户bob(在组中bobsgroup)下运行。我需要添加一些内容吗/etc/init.d

注意:我不希望应用程序启动用户登录后而是在计算机启动时。

答案1

/etc/rc.local一种与启动系统无关的方法。您可以在脚本/etc/init.d/...、Upstart 配置文件以及 systemd 配置中使用它。

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

此命令将以 root 用户身份运行,并将sudo下拉到“oli”用户。显然,请根据您的目的更改用户和命令。

我应该补充一点,至少有十几种方法可以做到这一点……但根据我的经验,它们的效果大致相同。以下是使用其setuid节的 upstart 示例:

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.log在 60 秒后在您最喜欢的编辑器中打开,看看其中是否有任何有用的信息。

今天尝试@reboot发起tmux会话中,要运行的命令应该存在于其中,今天我偶然发现了一个顽固的脚本,最终用这个小技巧成功了。结合上面的日志记录显示它:

@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>"

相关内容