以非 root 身份运行程序的 Screen 实例

以非 root 身份运行程序的 Screen 实例

我有一个专用服务器(Ubuntu 12.04,无 GUI),每次我重启硬件时都会启动一个 McMyAdmin 实例并将其附加到屏幕实例。我将命令保存到 root 的 crontab 中,如下所示:

@reboot cd /var/MC_SVR && screen -dmS McMyAdmin ./MCMA2_Linux_x86_64

但问题是,我专门为 FTP 访问服务器文件设置了一个用户,这样我就不必总是通过 SSH 进入机器。由于服务器是以 root 进程启动的,因此它创建的所有文件显然都以 root 为所有者。

所以我把所有文件都 chown 了,并把它们设置为ftpuser。现在我只能尝试让进程以 ftpuser 身份启动。我试过以下方法,但无济于事:

cd /var/MC_SVR && su ftpuser - -c 'screen -dmS McMyAdmin ./MCMA2_Linux_x86_64'

我在终端中尝试了这个,没有出现任何错误或任何东西(事实上,除非是来自 su 的语法错误,否则我什么也不会出现),但是没有可以访问的屏幕实例,所以我可以假设服务器从未启动。

那么,我做错了什么?还是我只是没有正确访问屏幕实例,因为它(应该)由另一个用户启动?

答案1

cron 最常见的问题之一是它使用最小的 shell 和最小的环境变量运行。因此,最好始终使用程序、二进制文件、库或文件的完整路径。

此外,虽然您可以使用 su,但在我看来,sudo 是一个更好的工具。使用 -u 标志指定用户。

总而言之,

sudo -u ftpuser "screen -dmS /var/MC_SVR/McMyAdmin /var/MC_SVR/MCMA2_Linux_x86_64"

相关内容