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
bb2018
V2EX  ›  Python

为什么这样写 Linux 开机自启动。上面的 uwsgi.ini 可以自启动。下面的这一行就不行呢?

  •  
  •   bb2018 · 2017-11-05 23:01:10 +08:00 · 5132 次点击
    这是一个创建于 2582 天前的主题,其中的信息可能已经有所发展或是发生改变。
    #vi /etc/rc.d/rc.local

    加入如下启动命令:
    /etc/rc.d/init.d/mysqld start
    /etc/init.d/nginx start
    /usr/local/subversion/bin/svnserve -d



    #开机自启动 uwsgi
    cd /var/wwwroot/html/aaa && /usr/local/bin/uwsgi --ini aaa_uwsgi.ini
    cd /var/wwwroot/html/ddd && /usr/local/bin/uwsgi --ini ddd_uwsgi.ini

    上面两行。aaa_uwsgi.ini 可以重启自启动。
    下面的 ddd_uwsgi.ini 就不行。重启后。还需要进目录手动启动。这个怎么回事?

    有什么办法让所有的 uwsgi.ini 都可以自启动。


    python django uwsgi 环境
    15 条回复    2017-11-06 08:44:15 +08:00
    nanpuyue
        1
    nanpuyue  
       2017-11-05 23:13:10 +08:00 via iPhone
    虽然你这个方法很不清真……

    但是,试试在 aaa_uwsgi.ini 后面加&,aa_uwsgi.ini 和&用空格隔开。
    bb2018
        2
    bb2018  
    OP
       2017-11-05 23:16:58 +08:00
    @nanpuyue
    aaa_uwsgi.ini
    ddd_uwsgi.ini
    不在同一个目录~
    wdlth
        3
    wdlth  
       2017-11-05 23:30:56 +08:00 via Android
    用 supervisor 不好么?
    wdlth
        4
    wdlth  
       2017-11-05 23:34:54 +08:00 via Android
    应该是没有用 -d 使第一个在后台运行,自然就走不下去了。
    cappuccinos
        5
    cappuccinos  
       2017-11-05 23:37:42 +08:00 via iPhone
    第一个注释掉第二个能执行么?
    bb2018
        6
    bb2018  
    OP
       2017-11-05 23:38:10 +08:00
    @wdlth
    cd /var/wwwroot/html/aaa && /usr/local/bin/uwsgi --ini aaa_uwsgi.ini -d

    这样? 才会执行下面的句子?
    bb2018
        7
    bb2018  
    OP
       2017-11-05 23:45:20 +08:00
    @cappuccinos

    刚试了一下。第一个注释掉第二个能执行!!
    wdlth
        8
    wdlth  
       2017-11-05 23:52:47 +08:00 via Android
    @bb2018 uwsgi 有一个 -d 选项是指定用 daemonize 模式执行,或者在 ini 里面配 daemonize。如果不是 daemonize,第一个 uwsgi 执行后仍然在前台,不会继续执行后面的命令。
    bb2018
        9
    bb2018  
    OP
       2017-11-05 23:55:17 +08:00
    @wdlth
    /usr/local/subversion/bin/svnserve -d
    这一行我去掉了。还是不行。
    不知道再要怎么改?
    wdlth
        10
    wdlth  
       2017-11-06 00:03:53 +08:00 via Android
    @bb2018 检查 ini 里面有没有
    daemonize = /xxx/yyy.log
    这样的配置,如果没有就加上一行,后面那个是日志路径。
    bb2018
        11
    bb2018  
    OP
       2017-11-06 00:15:01 +08:00
    @wdlth

    果然这样就解决了。。

    谢谢谢~
    wwqgtxx
        12
    wwqgtxx  
       2017-11-06 00:17:21 +08:00 via iPhone
    如果是比较新的 linux 建议你用 systemd 管理服务,比 rc.local 这种好很多
    FullBridgeRect
        13
    FullBridgeRect  
       2017-11-06 00:53:27 +08:00 via Android
    我记得 uwsgi 装上就有一个 service 服务了,直接在 /etc/uwsgi 里面写配置就可以的。
    这种方法。。。不是很清真
    bao3
        14
    bao3  
       2017-11-06 00:58:24 +08:00
    楼主,这命令是下一行要等待上一行执行完毕,你最后的两行,因为最后一行要等待上一行结束,所以就一直执行不了(因为你上一行处于执行中,前台)。所以你在 rc.local 里自己的命令要用 & 结尾。前面有人说 && ,这个也不准确,&& 的意思是必须前一条执行正确(注意,是正确,没有错误),并且执行结束,才执行后者。

    另外,楼主你最好不要用 rc.local,前面也有人说了,不清真。你可以用 supervisor,自己写一个 [program:aaaugi],自动开机执行
    jingniao
        15
    jingniao  
       2017-11-06 08:44:15 +08:00 via Android
    目前已经习惯 supervisor,系统级 systemd 跟 service 不太熟练
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2853 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 12:17 · PVG 20:17 · LAX 04:17 · JFK 07:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.