动态 版块 发帖 消息 我的
Loading...
小绿叶技术博客
小绿叶技术博客
小绿叶技术Lv149   
linux 开机启动服务编写 systemd 系统服务,linux centos debian 添加 systemctl 系统进程,开机启动,管理守护进程     


 #    系统服务

[root@wwweisccn ~]# cat /usr/lib/systemd/system/eisc-logdata.service


[Unit]

# 服务描述

Description=eisc logdate

# 在网络初始化之后启动

After=network.target




[Service]

# 服务类型

Type=forking


# 类型1:oneshot:程序执行完成就自动结束了,没有后台进程,比如执行一个shell

# 类型2:forking:需要一个后台守护进程一直在运行,比如运行nginx、apache、sshd

# https://blog.csdn.net/seaship/article/details/108235858

# 守护进程:http://www.gosanye.com/post/3755.html

# 进程退出立即重启

Restart=always

RestartSec=5

# 服务每5秒重新启动一次

StartLimitInterval=0




# 工作目录

WoringDirectory=/root/eisc

# 启动命令

ExecStart=/root/eisc/date.sh


[Install]

# 当系统以多用户方式启动时,这个服务需要被自动运行

WantedBy=multi-user.target

 #  小绿叶技术博客 安防系统 


cat /usr/lib/systemd/system/eisc-anfang.service


[Unit]

# 服务描述

Description=eisc anfang

# 在网络初始化之后启动

#After=network.target remote-fs.target nss-lookup.target

After=auditd.service systemd-user-sessions.service time-sync.target




[Service]

#Type=forking

# 保留一个守护进程,持续运行,会报错,不加这个参数。

#PrivateTmp=true


# 工作目录

WoringDirectory=/eisc/anfang


# 启动命令

ExecStart=/eisc/anfang/ip.sh


RestartSec=30s

# 重启服务, 无效,

# 需要在脚本里面自己加 无限循环,保持运行生命


[Install]

# 当系统以多用户方式启动时,这个服务需要被自动运行

WantedBy=multi-user.target



 # 其他说明



systemctl start eisc-logdata.service                                 # 启动服务

systemctl enable eisc-logdata.service                              # 加入开机启动

systemctl disable eisc-logdata                                          # 取消开机启动

systemctl status eisc-logdata                                           # 查看改服务的状态






#--------------------------------- nginx 服务案例 --------------------------------------#

[Unit]

Description=The nginx HTTP and reverse proxy server

After=network-online.target remote-fs.target nss-lookup.target

Wants=network-online.target


[Service]

Type=forking

PIDFile=/run/nginx.pid

# Nginx will fail to start if /run/nginx.pid already exists but has the wrong

# SELinux context. This might happen when running `nginx -t` from the cmdline.

# https://bugzilla.redhat.com/show_bug.cgi?id=1268621

ExecStartPre=/usr/bin/rm -f /run/nginx.pid

ExecStartPre=/usr/sbin/nginx -t

ExecStart=/usr/sbin/nginx

ExecReload=/usr/sbin/nginx -s reload

KillSignal=SIGQUIT

TimeoutStopSec=5

KillMode=process

PrivateTmp=true


[Install]

WantedBy=multi-user.target



#-------------------------------------------------------------------------------------#













开机启动服务编写


进入目录  cd /etc/systemd/system/


1:编写属于自己的unit文件,命令为mybash.service,整个文件如下


这边以mybash开机运行为例:

1.建立服务文件

1、vim /lib/systemd/system/mybash.service

文件内容如下:

[Unit]

Description=mybash

#  [dɪ ˈs  k rɪ   p  ʃn]   di s k lui p xin  服务的简单描述 


After=network.target

# 依赖,仅当依赖的服务启动之后再启动自定义的服务单元


# Documentation : 服务文档



[Service]


Type=forking

# Type : 启动类型simple、forking、oneshot、notify、dbus

# Type=forking  以 fork 方式从父进程创建子进程,创建后父进程会立即退出


ExecStart=/etc/nginx start

# 启动当前服务的命令

ExecReload=/etc/nginx  restart

# 重启当前服务的命令

ExecStop=/etc/nginx  stop

# 停止服务


PrivateTmp=true


#ExecStart                       # 启动当前服务的命令

#ExecStartPre                 # 启动当前服务之前执行的命令

#ExecStartPost               # 启动当前服务之后执行的命令

#ExecReload                   # 重启当前服务时执行的命令

#ExecStop                     # 停止当前服务时执行的命令

#ExecStopPost              # 停止当其服务之后执行的命令


[Install]

WantedBy=multi-user.target
















################################# 参考资料和说明 ##################################



#---------- [Unit] ----------#

# 配置文件的第一个区块


Description                        # 简短描述

Documentation                 # 文档地址

Requires                            # 当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败

Wants                                # 与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败

BindsTo                             # 与Requires类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行

Before                               # 如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后启动

After                                 # 如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之前启动

Conflicts                           # 这里指定的 Unit 不能与当前 Unit 同时运行

Condition...                      # 当前 Unit 运行必须满足的条件,否则不会运行

Assert...                            # 当前 Unit 运行必须满足的条件,否则会报启动失败

[Install]通常是配置文件的最后一个区块,用来定义如何启动,以及是否开机启动。它的主要字段如下。


WantedBy:它的值是一个或多个 Target,当前 Unit 激活时(enable)符号链接会放入/etc/systemd/system目录下面以 Target 名 + .wants后缀构成的子目录中

RequiredBy:它的值是一个或多个 Target,当前 Unit 激活时,符号链接会放入/etc/systemd/system目录下面以 Target 名 + .required后缀构成的子目录中

Alias:当前 Unit 可用于启动的别名

Also:当前 Unit 激活(enable)时,会被同时激活的其他 Unit

[Service]区块用来 Service 的配置,只有 Service 类型的 Unit 才有这个区块。它的主要字段如下。


Type:定义启动时的进程行为。它有以下几种值。

Type=simple:默认值,执行ExecStart指定的命令,启动主进程

Type=forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出

Type=oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行

Type=dbus:当前服务通过D-Bus启动

Type=notify:当前服务启动完毕,会通知Systemd,再继续往下执行

Type=idle:若有其他任务执行完毕,当前服务才会运行

ExecStart:启动当前服务的命令

ExecStartPre:启动当前服务之前执行的命令

ExecStartPost:启动当前服务之后执行的命令

ExecReload:重启当前服务时执行的命令

ExecStop:停止当前服务时执行的命令

ExecStopPost:停止当其服务之后执行的命令

RestartSec:自动重启当前服务间隔的秒数

Restart:定义何种情况 Systemd 会自动重启当前服务,可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog

TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数

Environment:指定环境变量






https://www.cnblogs.com/aaronLinux/p/6861425.html

 0  已被阅读了377次  楼主 2022-03-06 20:51:03
回复列表

回复:linux 开机启动服务编写 systemd 系统服务,linux centos debian 添加 systemctl 系统进程,开机启动,管理守护进程

guest
登录之后更精彩~
Powered by HadSky 7.7.16
© 2015-2022 PuYueTian
您的IP:8.219.134.200,2022-08-10 07:47:49,Processed in 0.01634 second(s).
Powered by HadSky
小绿叶技术博客