使用 systemd 设置 PHP 程序为服务
使用 systemd 设置 PHP 程序为服务
在现代 Linux 系统中,systemd 是用于管理和控制服务的标准工具。通过 systemd,我们可以轻松地将 PHP 程序配置为后台运行的系统服务,从而实现自动化启动、重启和日志记录等功能。本文将介绍如何为 PHP 程序设置 systemd 服务单元,并涵盖相关配置步骤。
背景
假设我们有一个基于 PHP 的 Web 应用或脚本,需要在后台运行并且能够自动重启。通过配置 systemd,我们可以轻松实现以下目标:
- 启动时自动加载 PHP 应用。
- 在应用崩溃时自动重启。
- 设置日志记录路径,以便查看服务运行状态。
- 为服务指定特定的运行用户与组权限。
接下来,我们将一步步演示如何为一个 PHP 程序创建 systemd 服务。
步骤 1: 创建服务单元文件
服务单元文件是 systemd 管理服务的核心。首先,我们需要在 /etc/systemd/system/ 目录下为 PHP 程序创建一个新的 .service 文件。
sudo nano /etc/systemd/system/myapp.service
该文件的命名通常采用 <服务名>.service 的格式,比如这里使用 myapp.service。
步骤 2: 编写服务单元文件
在创建的文件中,填写如下内容来定义服务的行为:
[Unit]
Description=My PHP Application
After=network.target[Service]
ExecStart=/usr/bin/php /var/www/html/myapp/index.php
Restart=always
User=www-data
Group=www-data
Environment=APP_ENV=production
WorkingDirectory=/var/www/html/myapp
StandardOutput=append:/var/log/myapp/output.log
StandardError=append:/var/log/myapp/error.log[Install]
WantedBy=multi-user.target
关键配置说明:
-
[Unit] 部分:
Description:对服务的简短描述,方便管理员了解服务用途。After=network.target:指定服务在网络服务启动后才运行,适合需要网络的应用。
-
[Service] 部分:
ExecStart:定义服务启动时执行的命令。在此,我们指定了使用 PHP CLI 来运行/var/www/html/myapp/index.php文件。Restart=always:确保服务崩溃时自动重启,以保证持续运行。User和Group:指定运行该服务的用户和组。这里使用了www-data,它是大多数 Web 服务器(如 Apache 和 Nginx)使用的默认用户。Environment=APP_ENV=production:设置环境变量,比如指定应用程序的运行环境为production。WorkingDirectory:指定 PHP 程序的工作目录,这有助于确保程序正确地找到相关文件。StandardOutput和StandardError:指定标准输出和错误日志的存储路径。我们将日志输出到/var/log/myapp/目录下,分别记录标准输出和错误信息。
-
[Install] 部分:
WantedBy=multi-user.target:表示该服务适用于多用户模式。
步骤 3: 创建日志目录
确保日志目录存在且具有适当的权限。你可以通过以下命令创建日志目录并设置权限:
sudo mkdir -p /var/log/myapp
sudo chown www-data:www-data /var/log/myapp
这将创建 /var/log/myapp/ 目录并将其所有权授予 www-data 用户和组。
步骤 4: 重新加载 systemd 并启动服务
配置完服务单元文件后,需要重新加载 systemd 配置,并启动服务:
sudo systemctl daemon-reload
sudo systemctl start myapp.service
如果你希望服务在系统启动时自动运行,可以启用它:
sudo systemctl enable myapp.service
步骤 5: 检查服务状态
为了确认服务是否已正确启动,可以使用以下命令查看服务的状态:
systemctl status myapp.service
你将看到关于服务是否正常运行、最后一次启动的时间以及输出日志等信息。
步骤 6: 查看服务日志
根据前面定义的日志配置,PHP 程序的输出和错误信息会记录到 /var/log/myapp/output.log 和 /var/log/myapp/error.log 中。可以通过以下命令查看日志内容:
cat /var/log/myapp/output.log
cat /var/log/myapp/error.log
另外,你也可以使用 journalctl 命令来查看 systemd 日志:
journalctl -u myapp.service
总结
通过上述步骤,我们成功地将一个 PHP 程序配置为 systemd 服务,使其能够自动启动、崩溃时自动重启,并记录日志文件。通过这种方式,管理员可以轻松管理后台运行的 PHP 应用程序,确保其稳定性和可维护性。
关键命令汇总
- 启动服务:
sudo systemctl start myapp.service - 停止服务:
sudo systemctl stop myapp.service - 重启服务:
sudo systemctl restart myapp.service - 启用开机自启:
sudo systemctl enable myapp.service - 禁用开机自启:
sudo systemctl disable myapp.service - 查看服务状态:
systemctl status myapp.service - 重新加载服务单元文件:
sudo systemctl daemon-reload
通过合理配置和使用 systemd,你可以极大提升 PHP 应用的管理效率和稳定性。
相关文章:
使用 systemd 设置 PHP 程序为服务
使用 systemd 设置 PHP 程序为服务 在现代 Linux 系统中,systemd 是用于管理和控制服务的标准工具。通过 systemd,我们可以轻松地将 PHP 程序配置为后台运行的系统服务,从而实现自动化启动、重启和日志记录等功能。本文将介绍如何为 PHP 程序…...
HRNET模型实现钢板表面缺陷检测
关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有:中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等,曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝,拥有2篇国家级人工智能发明专利。 社区特色…...
28 基于51单片机的两路电压检测(ADC0808)
目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,通过ADC0808获取两路电压,通过LCD1602显示 二、硬件资源 基于KEIL5编写C代码,PROTEUS8.15进行仿真,全部资源在页尾,提供…...
SpringBootTest Mockito 虚实结合编写测试
SpringBootTest & Mockito 虚实结合测试 起因 单一使用mockito,会出现很多mock困难的问题,导致测试编写过程太长,太恶心 单一使用springboottest,会遇到需要外部接口的地方,这个时候就非得去真实调用才行。也很恶…...
国内外网络安全政策动态(2024年9月)
国内网络安全政策动态 ▶︎ 1.三项智能网联汽车强制性国家标准正式发布 9月4日,工业和信息化部组织制定的GB 44495—2024《汽车整车信息安全技术要求》、GB 44496—2024《汽车软件升级通用技术要求》和GB 44497—2024《智能网联汽车 自动驾驶数据记录系统》三项强制…...
使用Android studio进行Unit Test中遇到的问题记录
1、模块本身代码运行不起来 提示: Cannot resolve method ‘getVolumes’ in ‘StorageManager’ Cannot resolve method ‘registerListener’ in ‘StorageManager’ Cannot resolve method ‘unregisterListener’ in ‘StorageManager’ 查看Android 源码&…...
智能运维与问题诊断工具:提升生产环境的安全稳定性
引言 在当今复杂的IT环境中,确保生产系统的安全稳定运行是一项巨大挑战。随着技术的进步,智能运维和问题诊断工具应运而生,为IT团队提供了强大的支持。本文将介绍一系列先进的工具,这些工具利用人工智能、机器学习和自动化技术,帮助组织提高系统可靠性、加速问题解决、优…...
【MAUI】CommunityToolkit社区工具包介绍
一、为什么需要声明式开发 .NET的MVVM,始于WPF,很古典,它甚至可能是现代前端框架“声明式开发”的鼻祖。声明式开发,之所以出现,是因为命令式开发在UI层和代码层上无法解耦的问题。如下图所示: 1、命令式开发:后台代码需要调用UI层的控件(label.Text),如果更新UI层…...
【答疑解惑】图文深入详解undo和redo的区别及其底层逻辑
题记:最近有些人问我,undo和redo到底是什么关系,他们中不乏已经入行3-4年的同学,今天咱们就来深入探讨下到底什么是undo和redo,他们分别做什么,底层逻辑原理是什么等等。 1. undo 1.1 undo的存储结构 Un…...
低通滤波、反相放大器电路
1 简介 这种可调低通滤波、反相放大器电路可将信号电平放大 26dB 或 20V/V。R2 和 C1 会为此电路设置截止频率。此电路的频率响应与无源 RC 滤波器的相同,除非输出按放大器的通带增益进行放大。低通滤波器通常用于音频信号链,此滤波器有时也称为低音增强…...
SpringBoot助力服装生产流程优化
1 绪论 1.1 研究背景 当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高…...
【机器学习】线性回归算法简介 及 数学实现方法
线性回归 简介 利用 回归方程(函数) 对 一个或多个自变量(特征值)和因变量(目标值)之间 关系进行建模的一种分析方式。 数学公式: ℎ_(w) w_1x_1 w_2x_2 w_3x_3 … b w^Txb 概念 利用回归方程(函数) 对 一个或多个自变量(特征值)和因变量(目标值)之间 关…...
设计模式的学习
OO:Object-Oriented 面向对象 --- 《Head First设计模式》 这本书是用java写的,我是写C的,用C来写相关的代码 --- p2(第二页) #ifndef DUCK_H #define DUCK_H/*** brief The Duck class 鸭子类*/ class Duck { public:D…...
wordpress发邮件SMTP服务器配置步骤指南?
wordpress发邮件功能如何优化?怎么用wordpress发信? 由于WordPress默认的邮件发送功能可能不够稳定,配置SMTP服务器成为了许多网站管理员的选择。AokSend将详细介绍如何在WordPress中配置SMTP服务器,以确保邮件能够顺利发送。 w…...
胤娲科技:机械臂「叛逃」记——自由游走,再悄然合体
夜深人静,你正沉浸在梦乡的前奏,突然意识到房间的灯还亮着。此刻的你,是否幻想过有一只无形的手,轻盈地飘过,帮你熄灭那盏碍眼的灯? 又或者,你正窝在沙发上,享受电视剧的紧张刺激&am…...
分布式事务讲解 - 2PC、3PC、TCC
分布式事务讲解 - 2PC、3PC、TCC 前置知识 BASE理论: BASE是Basically Availbale(基本可用)、Soft state(软状态)、Eventually consistent(最终一致性)三个词语的缩写。BASE理论是对CAP理论中AP的一个扩展,通过牺牲强一致性来获得可用性,当…...
前端基础面试题·第四篇——Vue(其二)
1.Vue中路由传参 1.params传参 params 传参是通过URL路径来传递参数,这种方式传递的参数是必选的。这种传参方式需要在路由配置时在路由路径位置提前指定参数。 路由配置 const router new VueRouter({routes: [{path: /user/:id, // 这里的:id就是参数name: u…...
PHP反射
文章目录 介绍基本用法基本的反射示例1. 反射类2. 反射方法3. 反射属性4.反射全局函数5.反射函数的参数 优势和注意事项优势:注意事项: 介绍 PHP反射是一种强大的机制,允许在运行时检查类、接口、方法、属性等的结构和元数据。它可以用于许多…...
Gated Transformer Networks for Multivariate Time Series Classification
博客贡献人 徐宁 作者 Minghao Liu , Shengqi Ren , Siyuan Ma , Jiahui Jiao , Yizhou Chen , Zhiguang Wang(Facebook AI) and Wei Song∗ 标签 多元时间序列分类,Transformer,门控 摘要 用于时间序列分类的深度学习模型(主要是卷积网…...
这一次,AI真的能帮你实现职场跃迁
你有没有想过: AI不仅能帮你实现工作提效 还能帮你实现职场跃迁! 根据行业报告,近年来**AIGC(AI Generated Content)**领域岗位数量井喷式增长,AI大模型产品经理作为连接技术与市场的桥梁,正扮…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
