编写使用systemctl启动服务脚本

CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,像需要开机不登陆就能运行的程序,还是存在系统服务里吧,即:/usr/lib/systemd/system目录下

   

[Unit]

Description=MonitorJSCloud

After=network.service

   

[Service]

Type=simple

ExecStart=/usr/bin/python/root/test/ping_test.py

Restart=always

RestartSec=10

PrivateTmp=true

   

[Install]

WantedBy=multi-user.target

   

   

对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件。

   

systemctl enable httpd

   

上面的命令相当于在 /etc/systemd/system 目录添加一个符号链接,指向 /usr/lib/systemd/system 里面的 httpd.service 文件。

这是因为开机时, Systemd 只执行 /etc/systemd/system 目录里面的配置文件。这也意味着,如果把修改后的配置文件放在该目录,就可以达到覆盖原始配置的效果。

   

   

$ sudo systemctl status httpd

httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
Active: active (running) since
2014-12-05 12:18:22 JST; 7min ago
Main PID: 4349 (httpd)
Status: "Total requests: 1; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─4349 /usr/sbin/httpd -DFOREGROUND
├─4350 /usr/sbin/httpd -DFOREGROUND
├─4351 /usr/sbin/httpd -DFOREGROUND
├─4352 /usr/sbin/httpd -DFOREGROUND
├─4353 /usr/sbin/httpd -DFOREGROUND
└─4354 /usr/sbin/httpd -DFOREGROUND

1205 12:18:22 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
12
05 12:18:22 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
12
05 12:22:40 localhost.localdomain systemd[1]: Started The Apache HTTP Server.

   

Loaded行:

配置文件的位置,是否设为开机启动

Active行:

表示正在运行

Main PID行:

主进程ID

Status行:

由应用本身(这里是 httpd )提供的软件当前状态

CGroup块:

应用的所有子进程

日志块:

应用的日志

   

   

$ systemctl cat sshd.service

查看配置文件

   

配置文件详解

   

Unit

 

  

After

表示服务需要在***服务启动之后执行

无依赖

Before

表示服务需要在***服务启动之前执行

无依赖

Wants

弱依赖关系

  

Requires

强依赖关系

***停止之后本服务也必须停止

Service

  

  

EnvironmentFile

环境参数文件

EnvironmentFile=/etc/sysconfig/sshd

以key=value的形式保存

以$key形式读取

ExecStart

启动进程时执行的命令

  

ExecReload

重启服务时执行的命令

  

ExecStop

停止服务时执行的命令

  

ExecStartPre

启动服务之前执行的命令

  

ExecStartPost

启动服务之后执行的命令

  

ExecStopPost

停止服务之后执行的命令

  

   

所有的启动设置之前,都可以加上一个连词号(-),表示"抑制错误",即发生错误的时候,不影响其他命令的执行。比如,EnvironmentFile=-/etc/sysconfig/sshd(注意等号后面的那个连词号),就表示即使/etc/sysconfig/sshd文件不存在,也不会抛出错误。

   

Type

  

simple(默认值):

ExecStart字段启动的进程为主进程

forking

ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程

oneshot

类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务

dbus

类似于simple,但会等待 D-Bus 信号后启动

notify

类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务

idle

类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合

   

   

KillMode

  

control-group(默认值):

当前控制组里面的所有子进程,都会被杀掉

process

只杀主进程

mixed

主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号

none

没有进程会被杀掉,只是执行服务的 stop 命令。

   

   

Restart

  

no(默认值):

退出后不会重启

on-success

只有正常退出时(退出状态码为0),才会重启

on-failure

非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启

on-abnormal

只有被信号终止和超时,才会重启

on-abort

只有在收到没有捕捉到的信号终止时,才会重启

on-watchdog

超时退出,才会重启

always

不管是什么退出原因,总是重启

   

   

修改配置文件以后,需要重新加载配置文件,然后重新启动相关服务。

   

# 重新加载配置文件
$ systemctl daemon-reload

   

   

   

   

   

   

   

   

转载于:https://www.cnblogs.com/liuxia912/p/10960610.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CentOS 7中,使用systemctl命令来启动和停止服务脚本服务脚本存放在/usr/lib/systemd/目录下,分为系统服务和用户服务。系统服务一般用于开机自启动的程序,存放在/usr/lib/systemd/system目录下。用户服务则是用户自定义的服务脚本。 示例1中的服务脚本是Nightingale collector的示例,它的路径是/usr/lib/systemd/system/n9e-collector.service。该脚本定义了服务的描述、启动命令、工作目录等信息。 示例2中的服务脚本是flow-gateway的示例,它的路径是/lib/systemd/system/flowGateway.service。该脚本定义了服务的描述、启动命令、重启命令、停止命令等信息。 在启动和停止脚本中,可以使用ExecStart和ExecStop字段来指定启动和停止命令的路径。比如,示例2中的启动脚本路径是/home/flow-gateway/start.sh,停止脚本路径是/home/flow-gateway/stop.sh。 需要注意的是,在服务脚本中,可以使用连词号(-)来抑制错误。比如,示例3中的EnvironmentFile字段中的连词号表示即使指定的文件不存在,也不会抛出错误。 总结起来,CentOS 7中使用systemctl命令来启动和停止服务脚本服务脚本存放在/usr/lib/systemd/目录下,可以分为系统服务和用户服务。在服务脚本中,可以指定启动和停止命令的路径,并可以使用连词号来抑制错误。 #### 引用[.reference_title] - *1* *3* [CentOS 7 systemctl启动服务脚本编写](https://blog.csdn.net/study_in/article/details/107753172)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [CentOS7 通过Systemctl实现脚本的开机自启(亲测有效)](https://blog.csdn.net/qq_34651764/article/details/117020149)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值