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 & 

 

posted @ 2023-10-15 01:43  fangpinz  阅读(28)  评论(0编辑  收藏  举报