简介
Systemd 是 Linux 操作系统的系统和服务管理器。它广泛用于管理基于 Linux 的服务器上的服务、网络接口和其他系统资源。
当你的PHP脚本需要长时间在后台运行时,可以考虑将该脚本作为服务运行。
创建 PHP 脚本
首先,创建要作为 systemd 服务运行的 PHP 脚本。例如,创建一个名为 myscript.php
的脚本,该脚本在运行时将不断打印当前的时间在一个日志文件中:
<?php
while(1){
error_log(time()."\n", 3, "myscript.log");
sleep(1);
}
将此文件保存在您选择的目录中,例如“/www/wwwroot/test
”。
创建 systemd 服务
要为 PHP 脚本创建 systemd 服务,您需要创建一个描述服务配置的单元文件。单元文件应保存在 /etc/systemd/system
目录中,并且文件扩展名应为 .service
。
例如这里创建一个名为myscript.service
的服务,位置在/etc/systemd/system/myscript.service,内容如下:
[Unit]
Description=My PHP Script
After=network.target
[Service]
User=www
Group=www
Restart=always
WorkingDirectory=/www/wwwroot/test
ExecStart=/usr/bin/php myscript.php
[Install]
WantedBy=multi-user.target
这个单元文件告诉 systemd 创建一个名为 myscript
的服务,该服务使用 PHP 运行myscript.php脚本。它还指定,如果服务终止运行后,则应自动重新启动服务。
重新加载 systemd 配置
重新加载 systemd 守护程序,以便识别新服务。
systemctl daemon-reload
启动服务
systemctl start myscript
启动服务后,myscript.php将持续在服务器后台运行。你会发现myscript.log文件将持续记录日志。
通过ps -aux | grep myscript
可以看到myscript.php
进程:
输入kill -USR2 2477
手动杀死进程后,再次输入ps -aux | grep myscript
可以发现myscript.php
又自动启动了。
停止服务:
systemctl stop myscript
重启服务:
systemctl restart myscript
在开机时自动启动:
systemctl enable myscript
检查服务状态:
systemctl status myscript
这将显示服务是否正在运行、是否失败以及任何最近的日志输出。
卸载服务:
systemctl disable myscript
rm -rf /etc/systemd/system/myscript.service
systemctl daemon-reload
最后
本教程展示了如何在 Linux 上为 PHP 脚本创建 systemd 服务。通过执行这些步骤,您可以将 PHP 脚本作为 systemd 服务运行,并确保它在启动时自动启动,如果失败则重新启动,并且可以使用 systemctl 命令轻松管理。这对于运行需要在后台连续运行的 PHP 脚本非常有用,例如守护程序、cron 作业或长时间运行的进程。