在Linux下大部分软件都不会以守护进程运行,比如基于Python的Superset、Sentry,再比如基于Node的Phantomjs。这都是比较出名的开源软件,虽然与Nginx和php-fpm比有差距,但绝对算的上流行。
这样讲可能不直观,我们和Nginx的启动方式做个对比。Nginx的启动方式有如下两种:
# 第一种
$ service nginx start
#第二种
$ ./sbin/nginx
关闭与重启也很方便:
# 第一种
$ service nginx stop
$ service nginx restart
#第二种
$ ./sbin/nginx -s stop
$ ./sbin/nginx -s restart/reload
Nginx就是以守护进程在运行,我们登录服务器后运行命令,登出服务器后Nginx程序并不会退出。
而非守护进程运行的Superset、Sentry、Phantomjs,当我们的帐号登出后,程序也会马上退出。这肯定不是我们想看到的,于是出现了很多办法来让Superset、Sentry、Phantomjs一直保持运行不退出。
-
& 让程序在后台运行
$ phantomjs test.js &
& 用在一个命令的最后,可以把这个命令放到后台执行,程序输出的信息会实时打印出来,非常影响操作。帐号登出后程序也会退出。关闭程序需要使用 kill 命令。
-
nohup 让程序一直在后台运行
nohup phantomjs test.js >/dev/null 2>t.log &
nohup用在一个命令的最开始,可以把这个命令放到后台执行,帐号登出后程序不会退出。
关闭程序需要使用 kill 命令。 -
systemctl
使用&和nohup每次重启都很废操作,这时候就引入了 systemctl ,我们先看基本操作:
$ systemctl start phantomjs //开始 $ systemctl stop phantomjs //结束 $ systemctl restart phantomjs //重启 $ systemctl status phantomjs //状态信息
使用systemctl命令能很方便的将非守护进程运行的程序以守护进程的方式在后台运行,无论是开启、关闭、重启、查看状态都非常的方便。
下面我们说说如何转换:
-
新建service文件
$ vim /usr/lib/systemd/system/phantomjs.service ## 内容如下 [Unit] Description=Phantomjs by AriyaHidayat [Service] Type=simple ExecStart=/usr/local/bin/phantomjs index.js -p 8088 -t 300
-
运行
$ systemctl start phantomjs //开始
systemctl service文件的编写非常简单,也很灵活,有大量的参考文档。更丰富的功能,这里不做深入介绍。通过systemctl我们能将非守护进程的服务转换成守护进程,通过命令统一管理,提高生产力。
喜欢编程的朋友可以关注我的个人公众号,保证每周三篇原创。 程序员编程日志
网友评论