服务器运行的是 Debian 7 Wheezy,没有 systemd。
我有一个 Debian 用户,其主目录中安装了 Perlbrew。用户正在运行 Mojolicious 应用程序。为了使应用程序正常工作,必须加载 Perlbrew bashrc 文件。目前,用户登录并使用 运行他们的应用程序hypnotoad app
,这会启动守护进程。我试图将应用程序以及与其相关的所有内容都隔离到用户的主目录,并且我真的不想弄乱系统 Perl。但是,我希望他们的应用程序作为服务运行,在启动时启动等等,但我不确定在以用户身份运行服务时如何在 Perlbrew bashrc 中获取资源。
简而言之,我的问题在标题中得到了总结,但基本上我想知道如何在 bashrc 文件中获取服务的源代码。
答案1
你尝试过吗su <user> -l -c <cmd>
?
这些rc
脚本以 root 用户 (id=0) 的身份执行,因此,作为 root,您可以使用系统中定义的任何用户的权限生成一个进程。
例如 :
su root -l -c "ls /tmp"
在哪里 :
- -c :执行命令。
- -l :以指定用户身份登录。
答案2
当然,您不应该将用户的 .bashrc 导入到在系统启动时以 root 身份运行的脚本中。两个建议:
编写一个脚本来启动该服务(假设是 mystart.sh)。该脚本可以获取 .bashrc,然后启动应用程序:
#!/usr/bin/bash
. .bashrc
hypnotoad app
要在启动时运行该脚本,我建议使用用户的 crontab。让用户放置
@reboot mystart.sh
在他们的 crontab 中。这样它就以用户身份运行,并且将来是否要禁用或替换它取决于他们。