linux如何启动php服务_linux 下systemd自定义启动服务

前言:小时候爷爷家门口水库坝上经常会有一个精神不正常的人经过,家乡话叫他“泥栏(nilan)癫子”,这个人不知道是哪的,经常下午会从水库上走过,那时水库的水闸控制室还是旧的,上面还写有很多字,据说就有这个人写的,奶奶说这个人也是识字的人,有一次路过他将手中的木棍扔向了水库,对着水库咆哮,奶奶吓唬我们让我们赶紧进屋,当时觉得他很搞笑,现在回忆只觉得自己无知无趣又无情。

好了,今天为大家分享linux 下systemd自定义启动服务的相关命令

一,systemd简介

<a href="在《尝试爱上linux下的systemd》中可以看">超链接a>

二,自定义服务用systemd设置开机启动

这里我用编译安装nginx为例子,linux怎么安装nginx,也可以参考另一篇里写的, <a href=" 在《 li nux 下Nginx常用命令分享 》中可以看 " >超链接 a >,这里不再赘述安装好linxu后,创建编辑 /usr/lib/systemd/system/nginx.service就可以
#vi /usr/lib/systemd/system/nginx.service[Unit]Description=nginx-serverAfter=network.target[Service]Type=forkingExecStart=/usr/local/nginx/sbin/nginxPrivateTmp=true[Install]WantedBy=multi-user.target#设置开机启动,启动,关闭,重启命令systemctl daemon-reload  #重新加载systemctl enable nginx.service #设置开机启动systemctl start nginx.service systemctl stop nginx.servicesystemctl restart nginx.service

三,补充知识

1,为什么是在/usr/lib/systemd/system/目录创建服务

Systemd 默认从目录 /etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录 /usr/lib/systemd/system/,真正的配置文件存放在那个目录,systemctl enable命令用于在上面两个目录之间,建立符号链接关系。如图2, UnitSystemd 可以管理所有系统资源。不同的资源统称为 Unit(单位),Unit 一共分成12种
Service unit:系统服务Target unit:多个 Unit 构成的一个组Device Unit:硬件设备Mount Unit:文件系统的挂载点Automount Unit:自动挂载点Path Unit:文件或路径Scope Unit:不是由 Systemd 启动的外部进程Slice Unit:进程组Snapshot Unit:Systemd 快照,可以切回某个快照Socket Unit:进程间通信的 socketSwap Unit:swap 文件Timer Unit:定时器
2.1:[ Unit] 启动顺序与依赖关系
1,Description:当前服务的简单描述2,Documentation:指定 man 文档位置3,After:如果 network.target 或 sshd-keygen.service 需要启动,那么 sshd.service 应该在它们之后启动4,Before:定义 sshd 应该在哪些服务之前启动,注意:After 和 Before 字段只涉及启动顺序,不涉及依赖关系。5,Wants:表示 sshd.service 与 sshd-keygen.service 之间存在"弱依赖"关系,即如果"sshd-keygen.service"启动失败或停止运行,不影响 sshd.service 继续执行6,Requires:表示"强依赖"关系,即如果该服务启动失败或异常退出,那么sshd.service 也必须退出注意:Wants 字段与 Requires 字段只涉及依赖关系,与启动顺序无关,默认情况下是同时启动。

2.2:[Service] 启动行为

EnvironmentFile:许多软件都有自己的环境参数文件,该字段指定文件路径,本文上述例子没用到这个例子:EnvironmentFile=-/etc/sysconfig/nginx   “-” 表示忽略错误Type:定义启动类型可设置:simple,exec,forking,oneshot,dbus,notify,idlesimple(设置了 ExecStart= 但未设置 BusName= 时的默认值):ExecStart 字段启动的进程为该服务的主进程forking:ExecStart 字段的命令将以 fork() 方式启动,此时父进程将会退出,子进程将成为主进程ExecStart:定义启动进程时执行的命令上面的例子中,启动 nginx执行的命令是/usr/local/nginx/sbin/nginx注意,可以在后面加入变量$OPTIONS,其中的变量$OPTIONS就来自 EnvironmentFile 字段指定的环境参数文件类似的,还有如下字段:ExecReload:重启服务时执行的命令ExecStop:停止服务时执行的命令ExecStartPre:启动服务之前执行的命令ExecStartPost:启动服务之后执行的命令ExecStopPost:停止服务之后执行的命令RemainAfterExit:设为yes,表示进程退出以后,服务仍然保持执行KillMode:定义 Systemd 如何停止服务,可以设置的值如下:control-group(默认值):当前控制组里面的所有子进程,都会被杀掉process:只杀主进程mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号none:没有进程会被杀掉,只是执行服务的 stop 命令Restart:定义了退出后,Systemd 的重启方式。可以设置的值如下:no(默认值):退出后不会重启on-success:只有正常退出时(退出状态码为0),才会重启on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启on-abnormal:只有被信号终止和超时,才会重启on-abort:只有在收到没有捕捉到的信号终止时,才会重启on-watchdog:超时退出,才会重启always:不管是什么退出原因,总是重启RestartSec:表示 Systemd 重启服务之前,需要等待的秒数
注意,配置中多个相同配置会选择最后一个,例如下面结果是 ex2
[Service]ExecStart=/bin/sh ex1ExecStart=/bin/sh ex2

2.3:[Install]

WantedBy:表示该服务所在的 Target(服务组)
关于服务器查看运行级别命令补充
# 查看默认 Targetsystemctl get-default# 结果为 multi-user.target,表示默认的启动 Target 是multi-user.target。#在这个组里的所有服务,都将开机启动。# 查看 multi-user.target 包含的所有服务systemctl list-dependencies multi-user.target

四,其它命令补充

首先要明确,Systemd 并不是一个命令,而是一组命令,涉及到系统管理的很多方面,下面是一些例子:

1,systemctl是 Systemd 的主命令,用于管理系统。

# 重启系统,centos7直接reboot也能重启sudo systemctl reboot# 关闭系统,切断电源sudo systemctl poweroff#CPU停止工作sudo systemctl halt#暂停系统sudo systemctl suspend#让系统进入冬眠状态sudo systemctl hibernate#让系统进入交互式休眠状态sudo systemctl hybrid-sleep#启动进入救援状态(单用户状态)sudo systemctl rescue

2,systemd-analyze命令用于查看启动耗时。

# 查看启动耗时systemd-analyze                                                                                       # 查看每个服务的启动耗时systemd-analyze blame# 显示瀑布状的启动过程流systemd-analyze critical-chain# 显示指定服务的启动流systemd-analyze critical-chain atd.service

3,localectl命令用于查看本地化设置。

# 查看本地化设置localectl# 设置本地化参数。sudo localectl set-locale LANG=en_GB.utf8sudo localectl set-keymap en_GB

五,总结

cento7升级为Systemd,与cento6的init进程相比,主要差别如下:

1,默认的 RunLevel(在/etc/inittab文件设置)现在被默认的 Target 取代,位置是/etc/systemd/system/default.target,通常符号链接到graphical.target(图形界面)或者multi-user.target(多用户命令行)。

2,启动脚本的位置,以前是/etc/init.d目录,符号链接到不同的 RunLevel 目录 (比如/etc/rc3.d、/etc/rc5.d等),现在则存放在/lib/systemd/system和/etc/systemd/system目录。

3,配置文件的位置,以前init进程的配置文件是/etc/inittab,各种服务的配置文件存放在/etc/sysconfig目录。现在的配置文件主要存放在/lib/systemd目录,在/etc/systemd目录里面的修改可以覆盖原始设置。

最后的最后(Last but not least),欢迎交流:

关注公众号留言,或者在下方直接留言:

b56d11fa40a7fcb0277bf13a0a484634.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值