我已经在/etc/init.d/中创建了一个脚本,该脚本必须从其主目录中的其他(非root用户)用户运行其他几个脚本,就像他们启动了它们一样。
我使用以下命令启动这些脚本: sudo -b -u <username> <script_of_a_particular_user>
而且有效。但是对于每个继续运行的用户脚本(例如某些看门狗),我看到一个相应的父sudo进程,该进程仍处于活动状态并以root身份运行。这会在活动进程列表中造成混乱。
所以我的问题是:如何以另一个用户身份从现有bash脚本启动(分支)另一个脚本并将其保留为孤立的(独立的)进程?
更详细的解释:
我基本上是想通过运行在其主目录中名为.startUp和.shutDown的各个子目录中的可执行文件,向计算机上的其他用户提供一种在系统启动或系统关闭时运行内容的方法。由于我没有找到其他方法来执行此操作,因此我编写了可以完全执行此操作的bash脚本,并已在/etc/init.d/中将其配置为服务脚本(通过遵循框架示例),因此在运行时使用start参数,它将从.startUp目录启动所有内容;当使用stop参数运行时,它将从所有用户的.shutDown目录启动所有内容。
另外,如果我可以使用一些现有的解决方案来解决此问题,我也很感兴趣。
更新
我环顾了一下,发现了这个问题:https :
//unix.stackexchange.com/questions/22478/detach-a-daemon-using-sudo
在那里接受答案,使用:sudo -u user sh -c "daemon & disown %1"
,对我有用。但是我也尝试了不放弃%1的情况,这是相同的。因此,这正是我所期望的:
sudo -u <username> bash -c "<script_of_a_particular_user> &"
现在,我的另一个问题是,为什么它会不加修改地起作用?无论是否有某些特殊情况,我是否仍应保留拒绝通知?
更新2
显然这也可行:
su <username> -c "<script_of_a_particular_user> &"
这个调用和sudo调用之间有什么区别吗?我知道这可能是一个完全不同的问题。但是由于我自己在这里找到答案,也许出于这个主题的缘故,有人可以在这里进行澄清。
更新3在我引导计算机之后
,这两种使用su或sudo的方法现在都会产生一个新的startpar进程(以root身份运行的单个进程)。在进程列表中显示为:
startpar -f -- <name_of_my_init.d_script>
为什么会产生此过程?显然我做错了,因为没有其他init.d脚本正在运行此进程。
更新4
解决了startpar的问题。我对此提出了另一个问题:从rc.local或init.d启动进程时,
startpar进程挂起
还有一个问题需要进一步讨论非特权用户的启动机制:
为普通用户(非root用户)提供初始化和关闭自动运行功能