如何正确使用bash中的“nohup”和“&”作为另一个用户来运行程序

过去几个月,我一直在学习bashlinuxpipe理,同时生产越来越多的需要在后台运行的代码。 理想情况下,我希望使我的开发系统更接近于生产环境,以避免由于安全和权限问题而重新开发代码。

一般来说,我会运行的东西:

$nohup <program> <program args> >> <program logfile> 2>&1 & 

即:

 $nohup ping 192.168.0.1 >> ping.log 2>&1 & 

然而,今天我试图通过创build一个用户,并给予他们正确的权限,只能够访问自己的文件,没有别的正确的设置。 这似乎是一个明智的安全做法。

我会这样做:

 $sudo -u <program user> nohup <program> <program args> >> <program logfile> 2>&1 & 

但是,当我运行ps aux | grep <program>时会导致以下输出 ps aux | grep <program>

 <admin user>@server:~$ ps aux | grep <program> root 1396 0.0 0.0 61868 3792 pts/38 S 10:50 0:00 sudo -u <program user> nohup <program> <program args> <program user> 1397 0.0 0.8 1273232 68308 pts/38 Sl 10:50 0:02 <program> <program args> 

问题是输出中的第一行:理想情况下,我希望能够运行这些程序,而无需启动任何具有根级权限的进程。 我怎么做?

你可以这样做:

 su - user -c "nohup ping 192.168.122.1 >> ping.log 2>&1 &"