ling516
V2EX  ›  Python

写了一个 py 想让它在云服务后台运行

By ling516 at 2021 年 3 月 27 日 · 8162 次点击
nohup python3 test.py &
网上搜了半天是使用这个命令,但是关闭窗口后进程还是结束了
网上还说 nohup 按任意键回到 shell,再用 exit 退出,但是关闭窗口后进程还是结束了

求大佬指点
69 条回复  •  2021-03-30 11:16:23 +08:00
lambdafate
   1
lambdafate  
   2021 年 3 月 27 日   ❤️ 5
强推 screen 命令, 谁用谁知道
privapps
   2
privapps  
   2021 年 3 月 27 日
nohup 之后,用
disown %%

再试试
ByteCat
   3
ByteCat  
   2021 年 3 月 27 日
写成服务运行,懒的话直接 screen
mmtromsb456
   4
mmtromsb456  
   2021 年 3 月 27 日
关键词进程守护,相对更加稳定并且在服务意外关闭后可以自动重启
可以选用一般发行版自带的 systemd,注册一个 systemd 服务进行管理即可,或者环境中已经存在 python 对额外添加包不敏感的话也可以用 supervisor.
如果没有这些要求的话,简单的使用 screen 命令创建一个 deattach 的 shell 来执行你的命令即可
johnsona
   5
johnsona  
   2021 年 3 月 27 日 via iPhone
screen
Tink
   6
Tink  
   2021 年 3 月 27 日 via Android
最简单就是你说的这个,然后依次是 screen-tmux-supervisor-systemd 等等
676529483
   7
676529483  
   2021 年 3 月 27 日   ❤️ 7
nohuo &是可以的,我觉得应该先检查下 python3 test.py 是否会一直运行
hertzry
   8
hertzry  
   2021 年 3 月 27 日 via Android
感觉 7#说的有道理。
rebang
   9
rebang  
   2021 年 3 月 27 日
进程管理器 pm2 挺不错的
ClericPy
   10
ClericPy  
   2021 年 3 月 27 日   ❤️ 2
按优先级推荐, 场景不一样
systemd
supervisord, 如果有时间调度 azkaban, airflow
tmux

还是看点 linux 基础吧...
isSamle
   11
isSamle  
   2021 年 3 月 27 日
nohup python xxx.py
cmos
   12
cmos  
   2021 年 3 月 27 日   ❤️ 2
又到了我来安利 systemd 的时候了
按照下面的来,注意一下文件路径即可。

```
[Unit]
Description=Python Service
After=multi-user.target
[Service]
WorkingDirectory=/path
User=root
Type=idle
ExecStart=/usr/bin/python3 /path/python.py
Restart=always
[Install]
WantedBy=multi-user.target
```
G2bN4dbX9J3ncp0r
   13
G2bN4dbX9J3ncp0r  
   2021 年 3 月 27 日
supervisord
systemd
yungo8
   14
yungo8  
   2021 年 3 月 27 日 via Android
我用 nohup 没毛病,参考一下 7 楼意见
aheadlead
   15
aheadlead  
   2021 年 3 月 27 日 via iPhone
打个 docker image 不香吗
ipwx
   16
ipwx  
   2021 年 3 月 27 日
supervisor
poterliu
   17
poterliu  
   2021 年 3 月 27 日
Java 启动是这样的,可以参考一下:
nohup java -jar 应用名 > 日志文件名>&1 &
wtks1
   18
wtks1  
   2021 年 3 月 27 日 via Android
命令前加 setsid
ylz
   19
ylz  
   2021 年 3 月 27 日
byobu 也很好用
ling516
   20
ling516  
OP
   2021 年 3 月 27 日
@imes 那还是用 systemd
seakingii
   21
seakingii  
   2021 年 3 月 27 日   ❤️ 1
我喜欢 supervisor
7gugu
   22
7gugu  
   2021 年 3 月 27 日 via iPhone
screen
mingff258
   23
mingff258  
   2021 年 3 月 27 日
如果是在 VS Code 里面运行 nohup 的话,是会有问题的,使用普通 ssh 客户端执行就行了。
CodeCodeStudy
   24
CodeCodeStudy  
   2021 年 3 月 27 日
两种办法:
1 、你可以把命令写到一个 shell 文件里,比如 run.sh ,然后 chmod +x run.sh ,再然后 ./sh
2 、敲完 nohup python3 test.py & 命令后,使用 exit 退出,如果使用 xshell 断开连接的话则不行喔
关键在于,使得进程的父进程 pid 是 1
imldy
   25
imldy  
   2021 年 3 月 27 日
systemd 或 tmux 。
前者适合长期使用,后者适合临时后台运行
yucongo
   26
yucongo  
   2021 年 3 月 27 日
tmux 或 pm2

喜欢折腾的话还可以装 tmux-resurrect 插件。
koast
   27
koast  
   2021 年 3 月 27 日 via Android
@imes 这种配置文件是挺好看的,不过我挺好奇这么多键名,是每次写的时候都要看看文档或者参考一下已有的配置文件?
simple2025
   28
simple2025  
   2021 年 3 月 27 日
单机, docker 怎么 pull 呀,registry 放哪里?
WildCat
   29
WildCat  
   2021 年 3 月 27 日
tmux?

tmux attach #0?
troilus
   30
troilus  
   2021 年 3 月 27 日
screen 是一个非常有用的命令,提供从单个 SSH 会话中使用多个 shell 窗口(会话)的能力。当会话被分离或网络中断时,screen 会话中启动的进程仍将运行,你可以随时重新连接到 screen 会话。如果你想运行一个持久的进程或者从多个位置连接到 shell 会话,这也很方便。
SenLief
   31
SenLief  
   2021 年 3 月 27 日
7 楼的没有问题啊。我的 ddns 就是这样扔到后台的。很长时间了也没挂。
kaka6
   32
kaka6  
   2021 年 3 月 27 日
高级点用:supervisor
简单点用:nohup python test.py &
chinvo
   33
chinvo  
   2021 年 3 月 27 日 via iPhone
虚拟 tty 法 screen tumux byobu
服务法 systemd init.d
2379920898
   34
2379920898  
   2021 年 3 月 27 日
nohup ./程序名 & 这样来用就 OK 了。。我发现这么多评论,都没有说道点子上,除了 32 楼
zhuweiyou
   35
zhuweiyou  
   2021 年 3 月 27 日
screen
pm2
zhoudaiyu
   36
zhoudaiyu  
   2021 年 3 月 27 日 via iPhone
哪位老哥知道哪里有教程讲 systemd 的 service 文件里面的配置字段啊
ychost
   37
ychost  
   2021 年 3 月 27 日
tmux 用起来美滋滋
Macv1994
   38
Macv1994  
   2021 年 3 月 27 日
supervisor 也挺不错的 还支持 web 端 如果需要可以参考我写的博客 https://2dogz.cn/blog/article/3/
Rainwater
   39
Rainwater  
   2021 年 3 月 27 日
exit 退出试一下,不要直接关闭连接窗口
realpg
   40
realpg  
   2021 年 3 月 27 日
screen 就完了
MOONLIGHTT
   41
MOONLIGHTT  
   2021 年 3 月 27 日
tmux+1
ronman
   42
ronman  
   2021 年 3 月 27 日 via Android   ❤️ 1
zengguibo
   43
zengguibo  
   2021 年 3 月 27 日
nohup python test.py & 绝对可以,如果不行先检查一下你的脚本
FransicZhang
   44
FransicZhang  
   2021 年 3 月 27 日 via Android
pm2 它不香嘛
zhoudaiyu
   45
zhoudaiyu  
   2021 年 3 月 27 日 via iPhone
@ronman 十分感谢~
nicevar
   46
nicevar  
   2021 年 3 月 27 日
大概率是程序写得有问题
ling516
   47
ling516  
OP
   2021 年 3 月 27 日
@nicevar 不是 已经可以了 写的 systemctl
nutting
   48
nutting  
   2021 年 3 月 27 日 via Android
看看父进程是啥就能分析出来为啥挂不住了
yanfany
   49
yanfany  
   2021 年 3 月 27 日
用 screen
dapan24678
   50
dapan24678  
   2021 年 3 月 27 日
个人感觉你还是先看看,不后台运行能跑起来不,很多时候是项目启动时报异常退出了,因为后台运行,异常信息也看不见,确定项目能跑起来了再用这个命令
cheneydog
   51
cheneydog  
   2021 年 3 月 27 日
@lambdafate
@ByteCat
@7gugu


我有个问题请教,screen 怎么能一行命令创建并执行?每次都得 screen -dmS xxx 进去运行,然后退出。
tomari
   52
tomari  
   2021 年 3 月 27 日
tmux 或者 screen,deep learning 做 train 和 interfere 的时候常用。。
tomari
   53
tomari  
   2021 年 3 月 27 日
@tomari inference....搜狗的英文输入法有毒
v2beta
   54
v2beta  
   2021 年 3 月 27 日
临时用一下的话可以试试 systemd-run

```
systemd-run --unit=py-test python3 /absolute/path/test.py
```
xiaochong0302
   55
xiaochong0302  
   2021 年 3 月 27 日 via iPhone
关键看你 test.py 里面是不是一次执行就结束了,你写个死循环试试
leavic
   56
leavic  
   2021 年 3 月 27 日
supervisor 就很好用
lithiumii
   57
lithiumii  
   2021 年 3 月 27 日 via Android
@chenqh Gitlab 可以免费私有镜像,另外其实可以把镜像直接当文件拷来拷去 (docker save 和 load)
simple2025
   58
simple2025  
   2021 年 3 月 27 日
@lithiumii 镜像文件太大了,动不动几百 M
oisadfo
   59
oisadfo  
   2021 年 3 月 28 日
应该是你的程序有 BUG,自己退出了
irytu
   60
irytu  
   2021 年 3 月 28 日 via iPhone
守护进程吧 不过最好弄下 logging 方便看问题 https://pypi.org/project/python-daemon/
DaGongRen001
   61
DaGongRen001  
   2021 年 3 月 28 日
nohup XXX &可能会因为环境变量问题导致运行失败,在敲第二下回车时就能看出来退出状态码是否为 0
www5070504
   62
www5070504  
   2021 年 3 月 28 日
nohup 还要注意错误的标准错误的重定向问题
litel
   63
litel  
   2021 年 3 月 28 日
pm2 大法好
nodejs 的时候就在用,py 也适用
julyclyde
   64
julyclyde  
   2021 年 3 月 28 日
nohup 忽略 HUP 信号并重定向
& 放后台
按说这俩都用上之后,退出 ssh 应该是不会导致程序中断的啊……
虽然不是正规做法,但是应该可以成功使用
Ealrang
   65
Ealrang  
   2021 年 3 月 28 日
pm2 非常舒服
jeeyong
   66
jeeyong  
   2021 年 3 月 28 日
我是 pm2, 跑了 5 年了快.
web 系统 nodejs, 业务服务是 python
都是用 pm2
julyclyde
   67
julyclyde  
   2021 年 3 月 28 日
哦。我大概猜到了
后期版本的 systemd 在用户注销的时候会把残留进程也都关闭
还是请使用正确的 systemd-run
SkyGuardian
   68
SkyGuardian  
   2021 年 3 月 28 日
nohup & 是最简单的,但实际上不能用于部署服务
之前有一个 python 脚本跑了几个月没事,有天上去发现因为系统的原因 terminated 了

所以要正经部署的话,自己写个 systemd service,就算脚本遇到意外退出了,还可以自动重启
lylh1987
   69
lylh1987  
   2021 年 3 月 30 日
pm2 大法好
推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
© 2026 V2EX · 215ms · 3.9.8.5