守护进程转换

在Linux下大部分软件都不会以守护进程运行,比如基于Python的Superset、Sentry,再比如基于Node的Phantomjs。这都是比较出名的开源软件,虽然与Nginx和php-fpm比有差距,但绝对算的上流行。

这样讲可能不直观,我们和Nginx的启动方式做个对比。Nginx的启动方式有如下两种:

1
2
3
4
5
# 第一种
$ service nginx start

#第二种
$ ./sbin/nginx

关闭与重启也很方便:

1
2
3
4
5
6
7
# 第一种
$ service nginx stop
$ service nginx restart

#第二种
$ ./sbin/nginx -s stop
$ ./sbin/nginx -s restart/reload

Nginx就是以守护进程在运行,我们登录服务器后运行命令,登出服务器后Nginx程序并不会退出。

而非守护进程运行的Superset、Sentry、Phantomjs,当我们的帐号登出后,程序也会马上退出。这肯定不是我们想看到的,于是出现了很多办法来让Superset、Sentry、Phantomjs一直保持运行不退出。

  1. & 让程序在后台运行

    1
    $ phantomjs test.js &

    & 用在一个命令的最后,可以把这个命令放到后台执行,程序输出的信息会实时打印出来,非常影响操作。帐号登出后程序也会退出。关闭程序需要使用 kill 命令。

  2. nohup 让程序一直在后台运行

    1
    nohup phantomjs test.js >/dev/null 2>t.log &

    nohup用在一个命令的最开始,可以把这个命令放到后台执行,帐号登出后程序不会退出。
    关闭程序需要使用 kill 命令。

  3. systemctl

    使用&和nohup每次重启都很废操作,这时候就引入了 systemctl ,我们先看基本操作:

    1
    2
    3
    4
    $ systemctl start phantomjs //开始
    $ systemctl stop phantomjs //结束
    $ systemctl restart phantomjs //重启
    $ systemctl status phantomjs //状态信息

    使用systemctl命令能很方便的将非守护进程运行的程序以守护进程的方式在后台运行,无论是开启、关闭、重启、查看状态都非常的方便。

下面我们说说如何转换:

  1. 新建service文件

    1
    2
    3
    4
    5
    6
    7
    8
    $ 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
  2. 运行

    1
    $ systemctl start phantomjs //开始

systemctl service文件的编写非常简单,也很灵活,有大量的参考文档。更丰富的功能,这里不做深入介绍。通过systemctl我们能将非守护进程的服务转换成守护进程,通过命令统一管理,提高生产力。
Administrator

管理后台

https://sw.it2048.cn/
帐号:jws-admin
密码:jws123123

UUID=ccd327d4-a1ed-4fd2-b356-3b492c6f6c34 / ext4 noatime,nodiratime,errors=remount-ro 0 1

UUID=ccd327d4-a1ed-4fd2-b356-3b492c6f6c34 / ext4 noatime,nodiratime,errors=remount-ro 0 1

“{21eeea22c91b40652147b7474b434f1c445a5b87FLgx1tnC”

docker run -d –name db_nextcloud \
-p 3307:3306 \
-e PUID=1000 \
-e PGID=100 \
-e MYSQL_ROOT_PASSWORD=ys9609YSB \
-e MYSQL_DATABASE=nextcloud \
-e MYSQL_USER=nextcloud \
-e MYSQL_PASSWORD=ys9609YSB \
–restart=unless-stopped \
-v /opt/mysql/db_nextcloud:/var/lib/mysql \
mariadb –transaction-isolation=READ-COMMITTED –binlog-format=ROW –innodb-file-per-table=1 –skip-innodb-read-only-compressed

docker run -d –name nextcloud \
-p 8888:80 \
–restart=unless-stopped \
-v /opt/nextcloud/html:/var/www/html \
-v /bigm/nextcloud/data:/var/www/html/data \
nextcloud

docker run \
-v /:/srv \
-v /path/filebrowser.db:/database.db \
-v /path/.filebrowser.json:/.filebrowser.json \
–user $(id -u):$(id -g) \
-p 80:80 \
filebrowser/filebrowser

docker run -d –name jellyfin –user root:root –net=host –volume /opt/jellyfin/config:/config –volume /opt/jellyfin/cache:/cache –mount type=bind,source=/bigm/download,target=/media –restart=unless-stopped jellyfin/jellyfin

CMCCAdmin
aDm8H%MdA

100.86.132.87
2409:8a62:30e:29e3:d259:19ff:fea3:d681
994879216

fe80::c01a:881e:f274:196b/10

100.68.186.37
100.100.231.11
2409:8a62:3e2:7650:9489:487e:7e37:2463
2409:8a62:30e:9860:d259:19ff:fea3:d681

http://[2409:8a62:30e:9d56:d259:19ff:fea3:d681]

20994879216@cmcc
561918
101

find . -name *.{txt,COM.mp4,url,rtf}

find . -iregex ‘.*.(txt|COM.mp4|url|doc|html|)’ | xargs rm -f

docker create –name=chinesesubfinder -e PUID=1000 -e PGID=100 -e TZ=Asia/Shanghai -v /opt/jellyfin/zimu:/config -v /bigm/download:/media –restart unless-stopped allanpk716/chinesesubfinder:latest

http://[2409:8a62:30e:29e3:d259:19ff:fea3:d681]:80/index.html

IP地址192.168.1.3
子网掩码255.255.255.0
网关192.168.1.1
DNS服务器

()
starting file import from: /var/tmp/pveupload-489426c18b68969a9447c42dc4c7a326
target node: pve
target file: /var/lib/vz/template/iso/openwrt-buddha-v5_2021_-x86-64-generic-squashfs-legacy.img
file size is: 541589504
command: cp – /var/tmp/pveupload-489426c18b68969a9447c42dc4c7a326 /var/lib/vz/template/iso/openwrt-buddha-v5_2021_-x86-64-generic-squashfs-legacy.img
finished file import successfully
TASK OK