相关疑难解决方法(0)

以其他用户身份启动脚本

我在 /etc/init.d/ 中创建了一个脚本,它必须从其他(非 root 特权)用户的主目录运行其他几个脚本,就好像他们启动了它们一样。

我使用以下命令启动这些脚本: sudo -b -u <username> <script_of_a_particular_user>

它有效。但是对于继续运行的每个用户脚本(例如一些看门狗),我看到一个相应的父 sudo 进程,仍然活着并以 root 身份运行。这会在活动进程列表中造成混乱。

所以我的问题是:如何从现有的 bash 脚本中以另一个用户身份启动(fork)另一个脚本并将其保留为孤立(独立)进程?

更详细的解释:
我基本上是想为机器上的其他用户提供一种在系统启动或系统关闭时运行东西的方法,方法是运行在其主目录中的各个子目录中找到的可执行文件,名为 .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> &"
Run Code Online (Sandbox Code Playgroud)

我现在的另一个问题是,为什么它可以在没有拒绝的情况下工作?无论如何,对于某些潜在的特殊情况,我是否仍然应该离开拒绝电话?

更新 2

显然这也有效:

su <username> -c "<script_of_a_particular_user> &"
Run Code Online (Sandbox Code Playgroud)

这个调用和 sudo 调用有什么区别吗?我知道这可能是一个完全不同的问题。但由于我自己在这里找到答案,也许为了这个话题,有人可以在这里澄清这一点。

更新 3 …

linux debian bash sudo init.d

13
推荐指数
1
解决办法
4万
查看次数

从 rc.local 或 init.d 启动进程时,startpar 进程挂起

从完整的 init.d 脚本(SysV 样式)或来自 rc.local 文件的简单单行调用启动正在进行的(类似服务的)进程时,我有一个特殊的问题,如下所示:

su someuser -c "/home/someuser/watchdog.sh &"
Run Code Online (Sandbox Code Playgroud)

watchdog.sh 包含以下内容:

#!/bin/bash

cd /home/someuser

until ./eventMonitoring.py
do
    echo "Program crashed with exit code $?. Starting again..." >&2
    sleep 1
done
Run Code Online (Sandbox Code Playgroud)

我总是在进程列表中留下一个额外的进程:

UID        PID  PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root      3048     1  0  1024   620   1 20:04 ?        00:00:00 startpar -f -- rc.local
Run Code Online (Sandbox Code Playgroud)

如果我从我的 init.d 脚本启动它(来源:https : //github.com/ivankovacevic/userspaceServices

我得到了相同的过程,但它是startpar -f -- userspaceServices

那个过程是什么鬼?为什么在查看 startpar 的手册页时没有提到-f参数?在启动时作为另一个用户启动进程方面,我做错了什么,这个奇怪的 startpar 进程也需要保留(或启动)?为什么任何其他 init.d 脚本都不存在该进程?

有人可以帮我解释一下这个问题吗? …

linux debian boot init.d rc.local

5
推荐指数
1
解决办法
5605
查看次数

标签 统计

debian ×2

init.d ×2

linux ×2

bash ×1

boot ×1

rc.local ×1

sudo ×1