之前使用supervisord做进程守护处理,但想用点别的,systemd是一个开机启动服务程序,同时也可以对启动的程序进行守护,这回就试试systemd吧,相比supervisord,systemd根本不用安装处理,直接系统自带用就行了,真的很省事。systemd有系统和用户区分;系统的任务存放在/user/lib/systemd/system/中;用户的存放在/etc/lib/systemd/user/里。一般系统管理员手工创建的单元文件建议存放在/etc/systemd/system/目录下面。我用的DEBIAN系统就是直接放在/etc/systemd/system/中。本文地址:http://www.04007.cn/article/816.html,未经许可,不得转载.
要添加一个新的service后台服务,新增加一个配置文件,示例如下。配置文件编辑之后使用systemctl enable aaa.service来载入服务,载入服务是什么意义呢?载入之后就是开机这个服务就会启动。执行成功就会在就会在/etc/systemd/system/multi-user.target.wants/目录下新建一个/usr/lib/systemd/system/nginx.service 文件的链接。这个软链接的目录取决于你的配置文件中Install设置的WantedBy值。这里需要用root权限,不然会报错:Failed to enable unit: The name org.freedesktop.PolicyKit1 was not provided by any .service files。包括后面执行start命令的时候也一样需要加root执行。本文地址:http://www.04007.cn/article/816.html,未经许可,不得转载.
#显示service配置文件 user@u04007:~$ sudo vim /etc/systemd/system/newjob.service [Unit] Description=newjob [Service] Type=forking PIDFile=/run/lark.pid ExecStart=/usr/local/bin/php /var/www/index.php controller action ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true Restart=always [Install] WantedBy=multi-user.target #使用systemctl enable载入,此处不加sudo可能会报错 user@u04007:/etc/systemd/system$ systemctl enable 04007ser.service Failed to enable unit: The name org.freedesktop.PolicyKit1 was not provided by any .service files user@u04007:/etc/systemd/system$ sudo systemctl enable 04007ser.service Removed /etc/systemd/system/multi-user.target.wants/04007ser.service. Created symlink /etc/systemd/system/multi-user.target.wants/04007ser.service → /etc/systemd/system/04007ser.service. #使用systemctl list-unit-files列出所有service并可查看状态 user@u04007:/etc/systemd/system$ sudo systemctl list-unit-files --type=service | grep my-test-daemon user@u04007:/etc/systemd/system$ sudo systemctl list-unit-files | grep 04007 04007ser.service enabled #启动这个服务,使用04007ser.service和04007ser都可以 user@u04007:/etc/systemd/system$ systemctl start 04007ser user@u04007:/etc/systemd/system$ #service文件有变化的时候需要重载 user@u04007:/etc/systemd/system$ sudo systemctl start 04007ser Warning: 04007ser.service changed on disk. Run 'systemctl daemon-reload' to reload units. Job for 04007ser.service failed because the control process exited with error code. See "systemctl status larksend-online.service" and "journalctl -xe" for details. user@u04007:/etc/systemd/system$ sudo systemctl daemon-reload user@u04007:/etc/systemd/system$ sudo systemctl start 04007ser user@u04007:/etc/systemd/system$ sudo systemctl status 04007ser本文地址:http://www.04007.cn/article/816.html,未经许可,不得转载.
经过上面这些步骤之后,新加入的service即已正常启动,可以使用systemctl status 查看service状态。还可使用restart/stop/reload。还可以使用sudo journalctl -f -u 04007ser连续查看服务的日志。本文地址:http://www.04007.cn/article/816.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/816.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
![]() |
![]() |
手机扫码直接打开本页面 |