![如何使用 bash 中的“nohup”和“&”以另一个用户身份正确运行程序](https://linux22.com/image/692161/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20bash%20%E4%B8%AD%E7%9A%84%E2%80%9Cnohup%E2%80%9D%E5%92%8C%E2%80%9C%26%E2%80%9D%E4%BB%A5%E5%8F%A6%E4%B8%80%E4%B8%AA%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E6%AD%A3%E7%A1%AE%E8%BF%90%E8%A1%8C%E7%A8%8B%E5%BA%8F.png)
过去几个月我一直在学习 bash 和 Linux 管理,同时编写越来越多需要在后台运行的代码。我理想情况下希望我的开发系统运行在更接近生产环境的位置,以避免由于安全和权限问题而不得不重新开发代码。
一般来说,我会运行以下操作:
$nohup <program> <program args> >> <program logfile> 2>&1 &
IE:
$nohup ping 192.168.0.1 >> ping.log 2>&1 &
但是,今天我尝试通过创建一个用户并授予他们正确的权限来正确设置它,使他们只能访问自己的文件而不能访问其他文件。它似乎就像一种明智的安全措施。
我会这样做:
$sudo -u <program user> nohup <program> <program args> >> <program logfile> 2>&1 &
但是,当我运行时,会导致以下输出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>
问题在于输出的第一行:理想情况下,我希望能够运行这些程序,而无需以 root 级权限启动任何进程。我该怎么做?
答案1
你可以这样做:
su - user -c "nohup ping 192.168.122.1 >> ping.log 2>&1 &"