在 Linux 中将 PHP 脚本作为 systemd 服务运行

简介

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 作业或长时间运行的进程。

相关文档

使用NSSM将PHP脚本封装为Windows服务

发表评论

邮箱地址不会被公开。 必填项已用*标注