nohup linux--ssh连接到linux-server, 后台运行脚本, 关闭ssh连接不影响后台脚本正常运行
方法1:
cat test1.py
#!/usr/bin/python3
import time
while True:
print('test!')
time.sleep(2)
在 ssh 中执行 sudo nohup ./test1.py 然后输入sudo密码验证获取权限, 此时 脚本test1.py运行在前台,可通过jobs查看,然后按Ctrl + Z, 暂停刚刚在前台运行的任务, 然后执行bg,将刚刚运行的任务放到了后台运行了.
此时由于nohup的作用, 关闭ssh终端也不会影响刚刚运行的任务了.
关闭ssh tty终端不会影响刚刚运行的任务(或者说是不会影响由sudo nohup ./test.py命令启动的进程),
sudo nohup ./test.py命令启动的进程会使用 /usr/bin/python3 ./test1.py命令启动一个子进程,
并且由于sudo的使用,进程和其子进程的用户都是具有最高权限的root用户了.
nohup命令启动的进程和其子进程都不会因为ssh tty终端(也是进程)的关闭而退出,
sudo nohup ./test1.py 命令启动的进程的父进程是 -bash, -bash进程的父进程是sshd: username@pts/1
当你关闭了ssh 终端, ssh连接会断开, 那么ssh连接对应的进程sshd: username@pts/1会退出, shhd: username@pts/1进程的子进程pts/1 -bash 也会退出. pts/1 -bash的子进程sudo nohup ./test1.py不会退出.
如果你kill -9 80574 这个sudo nohup ./test1.py启动的进程, 其子进程/usr/bin/python3 ./test1.py 也不会退出.其子进程会被1号进程接管,那么此时/usr/bin/python3 ./test1.py启动的进程的父进程就为1号进程了.
nohup 遇到执行python脚本时,不能将python脚本中的print打印输出到重定向的文件中, 这是由于python的输出存在缓存机制, 可以通过python -u解决,如下
nohup python3 -u ./test1.py > nohup.out &也可以将 -u 选项放到./test1.py中, 即#!/usr/bin/python3 -u, 然后执行
nohup ./test1.py > nohup.out &
如果同时也想把标准错误写到 nohup.out文件中,可以执行如下:
nohup python3 -u ./test1.py > nohup.out 2>&1 &
如果不想将标准输出和标准错误,写到nohup.out文件中,可以如下执行:
或者 nohup python3 -u ./test1.py &
如果需要后台运行时,验证sudo权限密码可以使用如下方式:
echo "password" |sudo -S nohup python3 -u ./test1.py &