写了一个 py 想让它在云服务后台运行 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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
V2EX    Python

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

  •  
  •   ling516 2021-03-27 13:09:30 +08:00 7366 次点击
    这是一个创建于 1737 天前的主题,其中的信息可能已经有所发展或是发生改变。
    nohup python3 test.py &
    网上搜了半天是使用这个命令,但是关闭窗口后进程还是结束了
    网上还说 nohup 按任意键回到 shell,再用 exit 退出,但是关闭窗口后进程还是结束了

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

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

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

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

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


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

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

    所以要正经部署的话,自己写个 systemd service,就算脚本遇到意外退出了,还可以自动重启
    lylh1987
        69
    lylh1987  
       2021-03-30 11:16:23 +08:00
    pm2 大法好
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5400 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 03:38 PVG 11:38 LAX 19:38 JFK 22:38
    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