写了一个 py 想让它在云服务后台运行 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
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
ling516

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

  •  
  •   ling516 Mar 27, 2021 7679 views
    This topic created in 1857 days ago, the information mentioned may be changed or developed.
    nohup python3 test.py &
    网上搜了半天是使用这个命令,但是关闭窗口后进程还是结束了
    网上还说 nohup 按任意键回到 shell,再用 exit 退出,但是关闭窗口后进程还是结束了

    求大佬指点
    69 replies    2021-03-30 11:16:23 +08:00
    lambdafate
        1
    lambdafate  
       Mar 27, 2021   5
    强推 screen 命令, 谁用谁知道
    privapps
        2
    privapps  
       Mar 27, 2021
    nohup 之后,用
    disown %%

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

    还是看点 linux 基础吧...
    isSamle
        11
    isSamle  
       Mar 27, 2021
    nohup python xxx.py
    cmos
        12
    cmos  
       Mar 27, 2021   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  
       Mar 27, 2021
    supervisord
    systemd
    yungo8
        14
    yungo8  
       Mar 27, 2021 via Android
    我用 nohup 没毛病,参考一下 7 楼意见
    aheadlead
        15
    aheadlead  
       Mar 27, 2021 via iPhone
    打个 docker image 不香吗
    ipwx
        16
    ipwx  
       Mar 27, 2021
    supervisor
    poterliu
        17
    poterliu  
       Mar 27, 2021
    Java 启动是这样的,可以参考一下:
    nohup java -jar 应用名 > 日志文件名>&1 &
        18
    wtks1  
       Mar 27, 2021 via Android
    命令前加 setsid
    ylz
        19
    ylz  
       Mar 27, 2021
    byobu 也很好用
    ling516
        20
    ling516  
    OP
       Mar 27, 2021
    @imes 那还是用 systemd
    seakingii
        21
    seakingii  
       Mar 27, 2021   1
    我喜欢 supervisor
    7gugu
        22
    7gugu  
       Mar 27, 2021 via iPhone
    screen
    mingff258
        23
    mingff258  
       Mar 27, 2021
    如果是在 VS Code 里面运行 nohup 的话,是会有问题的,使用普通 ssh 客户端执行就行了。
    CodeCodeStudy
        24
    CodeCodeStudy  
       Mar 27, 2021
    两种办法:
    1 、你可以把命令写到一个 shell 文件里,比如 run.sh ,然后 chmod +x run.sh ,再然后 ./sh
    2 、敲完 nohup python3 test.py & 命令后,使用 exit 退出,如果使用 xshell 断开连接的话则不行喔
    关键在于,使得进程的父进程 pid 是 1
    imldy
        25
    imldy  
       Mar 27, 2021
    systemd 或 tmux 。
    前者适合长期使用,后者适合临时后台运行
    yucongo
        26
    yucongo  
       Mar 27, 2021
    tmux 或 pm2

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

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


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

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

    所以要正经部署的话,自己写个 systemd service,就算脚本遇到意外退出了,还可以自动重启
    lylh1987
        69
    lylh1987  
       Mar 30, 2021
    pm2 大法好
    About     Help     Advertise     Blog     API     FAQ     Solana     1577 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 221ms UTC 16:43 PVG 00:43 LAX 09:43 JFK 12:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86