centos7创建自己的开机启动服务

最近在做项目中,需要php脚本一直监听mqtt上送的数据,并录入到数据库。需要PHP脚本开机自启动,本文主要讲解如何开机自启动执行php脚本。

1.先了解下systemd和systemctl

systemd即为system daemon,是linux下的一种init软件,由Lennart Poettering带头开发,并在LGPL 2.1及其后续版本许可证下开源发布,开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果,最终代替常用的System V与BSD风格init程序
Systemd是一个系统管理守护进程、工具和库的集合,用于取代System V初始进程。Systemd的功能是用于集中管理和配置类UNIX系统。

Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。

systemctl --version:可列出systemd版本(具体命令可参考链接:https://linux.cn/article-5926-1.html)

[root@ann sbin]# systemctl --version
systemd 219
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN

systemd是个守护进程,pid号为1,后面所有启动的服务或进程都是systemd的子进程及子进程的子进程。
ps -aef | grep [s]ystemd

[root@ann ~]# ps -aef | grep [s]ystemd
root         1     0  0 09:52 ?        00:00:00 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root       349     1  0 09:52 ?        00:00:00 /usr/lib/systemd/systemd-journald
root       370     1  0 09:52 ?        00:00:00 /usr/lib/systemd/systemd-udevd
root       507     1  0 09:52 ?        00:00:00 /usr/lib/systemd/systemd-logind
dbus       510     1  0 09:52 ?        00:00:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation

2.自己编写.service文件

/usr/lib/systemd/system/newtopo.service

[Unit]
Description=newtopo Service

[Service]
Type=forking
User=root
ExecStart=/etc/init.d/newtopo.sh

[Install]
WantedBy=multi-user.target

service脚本分为3个部分:[Unit] [Service] [Install]。

2.1.[Unit] 区块:启动顺序与依赖关系:

Description : 服务的简单描述
Documentation : 服务文档
Before、After:定义启动顺序。Before=xxx.service,代表本服务在xxx.service启动之前启动。After=xxx.service,代表本服务在xxx.service之后启动。
Requires:这个单元启动了,它需要的单元也会被启动;它需要的单元被停止了,这个单元也停止了。
Wants:推荐使用。这个单元启动了,它需要的单元也会被启动;它需要的单元被停止了,对本单元没有影响。

2.2.[Service] 区块:Service区块定义如何启动当前服务。

Type=simple(默认值):systemd认为该服务将立即启动。服务进程不会fork。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型。
Type=forking:systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便systemd能够跟踪服务的主进程。
Type=oneshot:这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。
Type=notify:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。
Type=dbus:若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。
Type=idle: systemd会等待所有任务(Jobs)处理完成后,才开始执行idle类型的单元。除此之外,其他行为和Type=simple 类似。

PIDFile:pid文件路径
ExecStart:指定启动单元的命令或者脚本,ExecStartPre和ExecStartPost节指定在ExecStart之前或者之后用户自定义执行的脚本。Type=oneshot允许指定多个希望顺序执行的用户自定义命令。
ExecReload:指定单元停止时执行的命令或者脚本。
ExecStop:指定单元停止时执行的命令或者脚本。
PrivateTmp:True表示给服务分配独立的临时空间
Restart:这个选项如果被允许,服务重启的时候进程会退出,会通过systemctl命令执行清除并重启的操作。
RemainAfterExit:如果设置这个选择为真,服务会被认为是在激活状态,即使所以的进程已经退出,默认的值为假,这个选项只有在Type=oneshot时需要被配置。
**

2.3[Install] :定义如何安装这个配置文件,即怎样做到开机启动。
WantedBy字段:表示该服务所在的 Target。
Target的含义是服务组,表示一组服务。WantedBy=multi-user.target指的是,服务所在的 Target 是multi-user.target
这个设置非常重要,因为执行systemctl enable newtopo.service命令时,newtopo.service的一个符号链接,就会放在**/etc/systemd/system**目录下面的multi-user.target.wants子目录之中。

Systemd 有默认的启动 Target。

[root@ann system]# systemctl get-default
multi-user.target

上面的结果表示,默认的启动 Target 是multi-user.target。在这个组里的所有服务,都将开机启动。这就是为什么systemctl enable命令能设置开机启动的原因。

3.基本命令:

1.设置服务开机启动:
systemctl enable newtopo.service
2.设置服务立即启动:
systemctl start newtopo.service
3.设置服务重新启动:
systemctl restart newtopo.service
4. 设置服务立即停止:
systemctl stop newtopo.service
5. 设置服务停止开机启动:
systemctl disable newtopo.service

4. 拓展:nohup

/etc/init.d/newtopo.sh

#!/bin/bash
nohup php newtopo.php &

nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

若想杀死进程:

kill  进程号PID

原文链接:https://blog.csdn.net/qq_16268979/article/details/114771854

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值