以不同用户身份运行 shell 脚本的好方法是什么?我正在使用 Debian etch,并且我知道我想模拟哪个用户。
如果我手动进行,我会这样做:
su postgres
./backup_db.sh /tmp/test
exit
Run Code Online (Sandbox Code Playgroud)
由于我想自动化该过程,因此我需要一种将 backup_db.sh 作为 postgres 运行的方法(继承环境等)
谢谢!
我在 /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 …