网站首页 > 精选教程 正文
systemctl启动脚本的编写
CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/, 有系统(system)和用户(user)之分, 像需要开机不登陆就能运行的程序, 还是存在系统服务里吧, 即:/usr/lib/systemd/system目录下, 脚本要有754的权限
每一个服务以.service结尾, 一般会分为3部分:[Unit]、[Service]和[Install]
脚本的内容格式
[Unit] 服务的说明
Description 描述服务
After 描述服务类别
[Service] 服务运行参数的设置
Type=forking 是后台运行的形式
PIDFile 为存放PID的文件路径
ExecStart 为服务的具体运行命令
ExecReload 为重启命令
ExecStop 为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:启动、重启、停止命令全部要求使用绝对路径
[Install] 服务安装的相关设置, 可设置为多用户
附录:
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认为服务就绪。
其他参数
定义环境变量的格式:
[Service]
EnvironmentFile=/etc/sysconfig/sshd
Environment="SECRET=pGNqduRFkB4K9C2vijOmUDa2kPtUhArN"
Environment="ANOTHER_SECRET=JP8YLOc2bsNlrGuD6LVTq7L36obpjzxd"
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
指定服务的工作目录。
[Service]
WorkingDirectory=/usr/local/rabbitmq
编写一个httpd 的启动脚本
1. 创建httpd.service 脚本文件
vim /usr/lib/systemd/system/httpd.service
2. 编写脚本内容
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=notify
ExecStart=/usr/local/apache/bin/apachectl start -c /usr/local/apache/conf/httpd.conf
ExecReload=/usr/local/apache/bin/apachectl restart
ExecStop=/usr/local/apache/bin/apachectl stop
[Install]
WantedBy=multi-user.target
编写mysql的启动脚本
1. 创建mysqld.service 脚本文件
vim /usr/lib/systemd/system/mysqld.service
2. 编写脚本内容
[Unit]
Description=mysql
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/mysql/support-files/mysql.server start
#ExecReload=/usr/local/mysql/support-files/mysql.server restart
#ExecStop=/usr/local/mysql/support-files/mysql.server stop
#PrivateTmp=true
[Install]
WantedBy=multi-user.target
编写nginx的启动脚本
1. 创建nginx.service 脚本文件
vim /usr/lib/systemd/system/nginx.service
2. 编写脚本内容
[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
[Install]
WantedBy=multi-user.target
编写php-fpm的启动脚本
1. 创建php-fpm.service 脚本文件
vim /usr/lib/systemd/system/nginx.service
2. 编写脚本内容
[Unit]
Description=php
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/php/sbin/php-fpm
[Install]
WantedBy=multi-user.target
编写使用systemctl启动服务脚本的完整流程
CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/, 有系统(system)和用户(user)之分, 像需要开机不登陆就能运行的程序, 还是存在系统服务里吧,
即:/usr/lib/systemd/system目录下
每一个服务以.service结尾, 一般会分为3部分:[Unit]、[Service]和[Install], 我写的这个服务用于开机运行Node.js项目, 具体内容如下:
> # vim /usr/lib/systemd/system/node.service
#[Unit]部分主要是对这个服务的说明, 内容包括Description和After, Description
#用于描述服务, After用于描述服务类别
[Unit]
Description=xiyoulibapi
After=network.target remote-fs.target nss-lookup.target
#[Service]部分是服务的关键, 是服务的一些具体运行参数的设置, 这里Type=forking
#是后台运行的形式, PIDFile为存放PID的文件路径, ExecStart为服务的具体运行命令,
#ExecReload为重启命令, ExecStop为停止命令, PrivateTmp=True表示给服务分配独立的临时空间;
#注意:[Service]部分的启动、重启、停止命令全部要求使用绝对路径, 使用相对路径则会报错!
[Service]
Type=forking
PIDFile=/node.js/pid
ExecStart=/usr/local/bin/forever start /node.js/xiyoulib/bin/www
ExecReload=/usr/local/bin/forever restart /node.js/xiyoulib/bin/www
ExecStop=/usr/local/bin/forever stop /node.js/xiyoulib/bin/www
PrivateTmp=true
#[Install]部分是服务安装的相关设置, 可设置为多用户的
[Install]
WantedBy=multi-user.target
服务脚本按照上面编写完成后, 以754的权限保存在/usr/lib/systemd/system目录下, 这时就可以利用systemctl进行配置了
> # chmod 754 /usr/lib/systemd/system/node.service
重新加载所有单元文件
systemctl daemon-reload
首先, 使用systemctl start [服务名(也是文件名)]可测试服务是否可以成功运行,
> # systemctl start node.service
如果不能运行则可以使用systemctl status [服务名(也是文件名)]查看错误信息和其他服务信息, 然后根据报错进行修改,
直到可以start, 如果不放心还可以测试restart和stop命令。
> # systemctl status node.service
> # systemctl restart node.service
> # systemctl stop node.service
接着, 只要使用systemctl enable [服务名(也是文件名)]就可以将所编写的服务添加至开机启动即可。
> # systemctl enable node.service
猜你喜欢
- 2024-10-15 守护进程工具--Supervisor 守护进程特点
- 2024-10-15 openresty一键安装部署脚本 openiv一键安装
- 2024-10-15 编写BAT脚本管理进程 bat脚本运行
- 2024-10-15 给你一篇部署文档,你能不能写一个脚本出来
- 2024-10-15 记一次微服务的部署 微服务 bus
- 2024-10-15 MySQL 复制与负载均衡 mysql复制表的结构和数据
- 2024-10-15 通过 Consul-Template 实现动态配置Nginx负载服务
- 2024-10-15 详解shell脚本case条件语句,开发各种服务启动脚本跳板机
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)