Python中为什么这样写Linux开机自启动脚本?uwsgi.ini可以自启动,但下面这行就不行呢?

#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 环境
Python中为什么这样写Linux开机自启动脚本?uwsgi.ini可以自启动,但下面这行就不行呢?


16 回复

虽然你这个方法很不清真……

但是,试试在 aaa_uwsgi.ini 后面加&,aa_uwsgi.ini 和&用空格隔开。


我无法理解你的问题


aaa_uwsgi.ini
ddd_uwsgi.ini
不在同一个目录~

用 supervisor 不好么?

应该是没有用 -d 使第一个在后台运行,自然就走不下去了。

第一个注释掉第二个能执行么?


cd /var/wwwroot/html/aaa && /usr/local/bin/uwsgi --ini aaa_uwsgi.ini -d

这样? 才会执行下面的句子?



刚试了一下。第一个注释掉第二个能执行!!

uwsgi 有一个 -d 选项是指定用 daemonize 模式执行,或者在 ini 里面配 daemonize。如果不是 daemonize,第一个 uwsgi 执行后仍然在前台,不会继续执行后面的命令。


/usr/local/subversion/bin/svnserve -d
这一行我去掉了。还是不行。
不知道再要怎么改?

检查 ini 里面有没有
daemonize = /xxx/yyy.log
这样的配置,如果没有就加上一行,后面那个是日志路径。



果然这样就解决了。。

谢谢谢~

如果是比较新的 linux 建议你用 systemd 管理服务,比 rc.local 这种好很多

我记得 uwsgi 装上就有一个 service 服务了,直接在 /etc/uwsgi 里面写配置就可以的。
这种方法。。。不是很清真

楼主,这命令是下一行要等待上一行执行完毕,你最后的两行,因为最后一行要等待上一行结束,所以就一直执行不了(因为你上一行处于执行中,前台)。所以你在 rc.local 里自己的命令要用 & 结尾。前面有人说 && ,这个也不准确,&& 的意思是必须前一条执行正确(注意,是正确,没有错误),并且执行结束,才执行后者。

另外,楼主你最好不要用 rc.local,前面也有人说了,不清真。你可以用 supervisor,自己写一个 [program:aaaugi],自动开机执行

目前已经习惯 supervisor,系统级 systemd 跟 service 不太熟练

回到顶部