【linux】使用systemctl start xxx启动自己的程序|开机启动|守护进程

目录

即看即用

详细说明

systemctl 的用途

用法

例子:以管理我们的程序verdaccio为例

开机启动

设置程序开机启动、关闭、启用/禁用服务以vsftpd为例

三个部分[Unit]、[Service]、[Install]配置说明


即看即用

  • 在 /lib/systemd/system/ 下创建一个配置文件,比如:vsftpd.service/vsftpd.target
  • 写配置文件
[Unit]
Description=vsftpd lightweight npm proxy registry

[Service]
Type=simple
Restart=on-failure
User=verdaccio
ExecStart=/usr/bin/vsftpd--config /etc/vsftpd/config.yaml

[Install]
WantedBy=multi-user.target
  • 添加启动权限

# chmod +x vsftpd.service

启动服务:systemctl start vsftpd.service

关闭服务:systemctl stop vsftpd.service

重启服务:systemctl restart vsftpd.service

显示服务的状态:systemctl status vsftpd.service

在开机时启用服务:systemctl enable vsftpd.service

在开机时禁用服务:systemctl disable vsftpd.service

查看服务是否开机启动:systemctl is-enabled vsftpd.service

查看已启动的服务列表:systemctl list-unit-files|grep enabled

查看启动失败的服务列表:systemctl --failed

详细说明

systemctl 的用途

       有时我们将自定义程序注册为systemd service 进程管理,交由系统管理,可以方便启动停止,亦可以实现服务异常退出重启,开机自启动。 减少自定义程序服务管理的时间消耗。

用法

1、新增配置文件a.service(添chmod +x   a.service),按要求里面写start、stop等对应要执行的操作。

2、配置文件放到/usr/lib/systemd/system文件夹下

3、可以用systemctl管理执行了:systemctl stop xxx,systemctl start xxx

例子:以管理我们的程序verdaccio为例


第1步:创建一个systemd unit 配置文件,比如:verdaccio.service,一般放在 /lib/systemd/system/ 下

内容如下:

[Unit]
Description=Verdaccio lightweight npm proxy registry

[Service]
Type=simple
Restart=on-failure
User=verdaccio
ExecStart=/usr/bin/verdaccio --config /etc/verdaccio/config.yaml

[Install]
WantedBy=multi-user.target

第2步:添加tomcat.service文件的启动权限

# chmod +x tomcat.service



第3步:使用

开机自启动:

systemctl enable verdaccio.service

立即启动:

systemctl start verdaccio.service

重新启动:

systemctl restart verdaccio.service

运行状态:

systemctl status verdaccio.service

原文链接:https://www.icode9.com/content-3-952939.html

开机启动

systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之
分,需要开机不登陆就能运行的程序,存在系统服务里,即:/usr/lib/systemd/system目录下.
每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install]

[Unit]
部分主要是对这个服务的说明,内容包括Description和After,Description 用于描述服务,
After用于描述服务类别
[Service]部分是服务的关键,是服务的一些具体运行参数的设置.
Type=forking是后台运行的形式,
User=users是设置服务运行的用户,
Group=users是设置服务运行的用户组,
PIDFile为存放PID的文件路径,
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令,
PrivateTmp=True表示给服务分配独立的临时空间

[Service]
注意:[Service]部分的启动、重启、停止命令全部要求使用绝对路径,使用相对路径则会报
错!

[Install]
[Install]部分是服务安装的相关设置,可设置为多用户的
首先,使用systemctl start [ 服务名(也是文件名) ] 可测试服务是否可以成功运行,如果不能运行 则可以使用systemctl status [ 服务名(也是文件名) ]查看错误信息和其他服务信息,然后根据报
错进行修改,直到可以start,如果不放心还可以测试restart和stop命令。
接着,只要使用systemctl enable xxxxx就可以将所编写的服务添加至开机启动即可。

[Unit]
Description=springboot webapp
After=springboot-webapp.service

[Service]
WorkingDirectory=/home/hlooc/app/springboot-webapp
Type=forking
Environment="JAVA_HOME=/home/hlooc/app/jdk1.8.0_202"
Environment="PATH=/home/hlooc/app/jdk1.8.0_202/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/hlooc/.local/bin:/home/hlooc/bin"
Environment="CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
User=hlooc
Group=hlooc
PIDFile=/home/hlooc/app/springboot-webapp/upp.pid
ExecStart=/home/hlooc/app/springboot-webapp/start.sh
ExecStop=/home/hlooc/app/springboot-webapp/stop.sh
PrivateTmp=true

[Install]
WantedBy=multi-user.target


服务操作


添加可执行权限:

chmod 754 /usr/lib/systemd/system/springboot-webapp.service


设置为开机自启动:

systemctl enable springboot-webapp.service

常用指令(以springboot-webapp服务为例):

启动某服务

systemctl start springboot-webapp.service

停止某服务

systemctl stop springboot-webapp.service

重启某服务

service springboot-webapp restart
systemctl restart springboot-webapp.service

使某服务自动启动(如springboot-webapp服务)

systemctl enable springboot-webapp.service

使某服务不自动启动

systemctl disable springboot-webapp.service

检查服务状态

systemctl status springboot-webapp.service (服务详细信息)
systemctl is-active springboot-webapp.service(仅显示是否Active)

显示所有已启动的服务

systemctl list-units --type=service
-----------------------------------
Linux使用systemctl自启动服务
https://blog.51cto.com/u_15127670/4380043

设置程序开机启动、关闭、启用/禁用服务以vsftpd为例

启动服务:systemctl start vsftpd.service

关闭服务:systemctl stop vsftpd.service

重启服务:systemctl restart vsftpd.service

显示服务的状态:systemctl status vsftpd.service

在开机时启用服务:systemctl enable vsftpd.service

在开机时禁用服务:systemctl disable vsftpd.service

查看服务是否开机启动:systemctl is-enabled vsftpd.service

查看已启动的服务列表:systemctl list-unit-files|grep enabled

查看启动失败的服务列表:systemctl --failed

systemctl设置程序开机启动、关闭、启用/禁用服务以vsftpd为例

原文:https://www.cnblogs.com/Li-JT/p/14018659.html

.service 参数详解(更具体的可参考http://www.jinbuguo.com/systemd/systemd.service.html)

三个部分[Unit]、[Service]、[Install]配置说明

service文件中包含三个部分,分别是:[Unit]、[Service]、[Install]

[Unit] 部分
Description 一段描述这个 Unit 文件的文字,通常只是简短的一句话。
Documentation 指定服务的文档,可以是一个或多个文档的URL路径。
Requires 依赖的其他 Unit 列表,列在其中的 Unit 模块会在这个服务启动的同时被启动,并且如果其中有任意一个服务启动失败,这个服务也会被终止
After 与 Requires 相似,但会在后面列出的所有模块全部启动完成以后,才会启动当前的服务。
Before 与 After 相反,在启动指定的任一个模块之前,都会首先确保当前服务已经运行。
Wants 与 Requires 相似,但只是在被配置的这个 Unit 启动时,触发启动列出的每个 Unit 模块,而不去考虑这些模块启动是否成功。
Conflicts 与这个模块有冲突的模块,如果列出模块中有已经在运行的,这个服务就不能启动,反之亦然。
OnFailure 当这个模块启动失败时,就自动启动列出的每个模块。
[Service] 部分
Type 服务的类型,常用的有 simple(默认类型) 和 forking。默认的 simple 类型可以适应于绝大多数的场景,因此一般可以忽略这个参数的配置。而如果服务程序启动后会通过 fork 系统调用创建子进程,然后关闭应用程序本身进程的情况,则应该将 Type 的值设置为 forking,否则 systemd 将不会跟踪子进程的行为,而认为服务已经退出。
Environment 为服务添加环境变量
EnvironmentFile 指定加载一个包含服务所需的环境变量列表的文件,文件中的每一行都是一个环境变量的定义。
ExecStart 这个参数是几乎每个 .service 文件都会有的,指定服务启动的主要命令,在每个配置文件中只能使用一次。需要使用绝对路径
ExecStartPre 指定在启动执行 ExecStart 的命令前的准备工作,可以有多个,所有命令会按照文件中书写的顺序依次被执行。
ExecStartPost 指定在启动执行 ExecStart 的命令后的收尾工作,也可以有多个。
ExecStop 停止服务所需要执行的主要命令。需要使用绝对路径
ExecStopPost 指定在 ExecStop 命令执行后的收尾工作,也可以有多个。
ExecReload 重新加载服务所需执行的主要命令。需要使用绝对路径
Restart 这个值用于指定在什么情况下需要重启服务进程。常用的值有 no,on-success,on-failure,on-abnormal,on-abort 和 always。默认值为 no,即不会自动重启服务。这些不同的值分别表示了在哪些情况下,服务会被重新启动
RestartSec 如果服务需要被重启,这个参数的值为服务被重启前的等待秒数。
Nice 服务的进程优先级,值越小优先级越高,默认为0。-20为最高优先级,19为最低优先级。
WorkingDirectory 指定服务的工作目录。
RootDirectory 指定服务进程的根目录( / 目录),如果配置了这个参数后,服务将无法访问指定目录以外的任何文件。
User 指定运行服务的用户,会影响服务对本地文件系统的访问权限。
Group 指定运行服务的用户组,会影响服务对本地文件系统的访问权限。
PrivateTmp 是否给服务分配独立的临时空间(true/false)
[Install] 部分
WantedBy 和前面的 Wants 作用相似,只是后面列出的不是服务所依赖的模块,而是依赖当前服务的模块。“WantedBy=multi-user.target” 表明当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行。当然还需要 systemctl enable 激活这个服务以后自动运行才会生效
RequiredBy 和前面的 Requires 作用相似,同样后面列出的不是服务所依赖的模块,而是依赖当前服务的模块。
Also 当这个服务被 enable/disable 时,将自动 enable/disable 后面列出的每个模块。

其中[Service] 部分Restart里面对应命令对应的情况如下图


作者:Hmcf
链接:https://www.jianshu.com/p/bc17d3162a48

猜你喜欢

转载自blog.csdn.net/bandaoyu/article/details/124358513
今日推荐