我的终端中运行一个简单的 exec,program.py
使用nohup
.这是脚本:
cd "$(dirname "$0")"
sudo -v
nohup sudo python3 program.py &
killall Terminal
它提示我输入密码,我这样做了,它接受密码会终止终端,但程序失败,并且此错误被附加到nohup.out
:
sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper
我尝试做
sudo -v
nohup sudo -S python3 program.py &
但这给出了错误
sudo: no password was provided
即使我输入了密码
提前致谢!
答案1
也许改变命令顺序:
sudo nohup python3 program.py &
这种方式是 sudo,在获取密码后,启动带有参数的 nohup 命令并断开 python3 与终端的连接,但再仔细想想,这意味着除了必须在/usr/bin/nohup python3 program.py
sudoers 文件中授权外,进入后台的是 sudo 命令,而不是 nohup 命令。
因此,要将后台操作与权限提升分开,请创建一个/root/mypylauncher.sh
包含该nohup python3 program.py &
命令的脚本,并使用sudo /root/mypylauncher.sh
. (如果该脚本位于世界可读的目录中,chown root:root
则chmod go-w
该脚本可以保证系统安全,免受恶意之手)。