Centos 7自定义Service实现自启动

Centos 7自定义Service实现自启动

  工作当中用到了gerrit服务器,安装配置好后,没有设置为开机自启动,在经历一次又一次的停电导致服务中断,然后不得不人工介入恢复服务的惨痛过程之后,决定必须实现开机自启动,摆脱这个痛苦的过程。

一、确定采用Service的方案

  多方比较之后,决定采用systemctl系统命令操作的service方案,服务目标文件目录如下:

/usr/lib/systemd/system

  参考linux centos7 开机自启动里面的内容看到了两个service样例,分别是下面的nginx和mysql例子,参照编写了后面的gerrit样例。
nginx.service

[Unit]
Description=nginx - high performance web 
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

mysql.service

[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

gerrit.service

[Unit]
Description=gerrit
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/bin/bash -c "/home/gerrit/review_site/bin/gerrit.sh start &"
ExecReload=/bin/bash -c "/home/gerrit/review_site/bin/gerrit.sh restart &"
ExecStop=/bin/bash -c "/home/gerrit/review_site/bin/gerrit.sh stop &"
PrivateTmp=true

[Install]
WantedBy=multi-user.target

二、踩坑经过说明

  上面展示的gerrit.serive是最终的版本,实际上,最开始的版本是这样的:

[Unit]
Description=gerrit
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/home/gerrit/review_site/bin/gerrit.sh start
ExecReload=/home/gerrit/review_site/bin/gerrit.sh restart
ExecStop=/home/gerrit/review_site/bin/gerrit.sh stop

[Install]
WantedBy=multi-user.target

  调用命令systemctl start gerrit尝试启动服务,使用命令journalctl -u gerrit发现一个奇怪的现象,每次都是先触发gerrit.sh start,然后触发gerrit.sh stop,结果最后服务启动失败,不能正常提供服务。尝试了调整Service里面的Type参数,也尝试添加PrivateTmp参数,都没有效果。想来想去,考虑到gerrit.sh start命令耗时较长,有可能是服务启动超时了,于是在网上搜索相关内容,最后终于在systemd systemctl ExecStart超时处理页面内容中找到了解决方案。解决方案就是使用“bash -c”的调用方式,bash -c的作用是将一个长字符串当做一条完整的命令来执行,如果在脚本路径后面加上后台运行符号(&),则目标脚本就会在后台运行,不会一直处于挂起状态,systemd也就不会一直等待目标脚本执行完成了,实际使用样例如下:

ExecStart=/bin/bash -c "/home/gerrit/review_site/bin/gerrit.sh start &"

三、其他说明

1.服务相关命令

systemctl start gerrit.service           # 启动服务
systemctl restart gerrit.service         # 重新启动服务
systemctl stop gerrit.service            # 停止服务
systemctl enable gerrit.service          # 设置开机自启动
systemctl disable gerrit.service         # 停止开机自启动
systemctl status gerrit.service          # 查看服务当前状态
systemctl list-units --type=service      # 查看所有已启动的服务

2.查看服务日志

journalctl -u gerrit

3.服务配置文件字段详解

  配置字段详解,可参考链接Centos7下service配置知识页面中的内容,内容比较详尽。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CentOS 7 开机启动文件路径有两个目录,一个是 `/etc/rc.d/rc.local`,另一个是 `/usr/lib/systemd/system/`。其中,`/etc/rc.d/rc.local` 是传统的 SysV init 脚本,而 `/usr/lib/systemd/system/` 是 systemd 的服务配置文件路径。 下面是最详细的 CentOS 7 设置自定义开机启动服务教程: 1. 创建服务脚本文件 在 `/etc/systemd/system/` 目录下创建一个新的服务脚本文件。文件名需要以 `.service` 结尾,并且文件名应该描述清楚服务的作用。例如,如果你要创建一个开机自动启动的 Nginx 服务,可以将服务脚本文件命名为 `nginx.service`。 2. 编写服务脚本 打开服务脚本文件,开始编写服务脚本。以下是一个简单的示例: ``` [Unit] Description=My Service After=network.target [Service] Type=simple ExecStart=/path/to/my/script.sh Restart=on-failure [Install] WantedBy=multi-user.target ``` 其中,`[Unit]` 区块定义了服务的基本信息,包括服务的描述和启动顺序。`[Service]` 区块定义了服务的具体实现,包括服务类型、服务启动命令和重启策略。`[Install]` 区块定义了服务的安装信息,包括服务的启动级别。 3. 重新加载 systemd 配置 使用 `systemctl daemon-reload` 命令重新加载 systemd 配置文件。 ``` sudo systemctl daemon-reload ``` 4. 启动服务 使用 `systemctl start` 命令启动服务。 ``` sudo systemctl start myservice ``` 5. 设置开机自启动 使用 `systemctl enable` 命令设置服务开机自启动。 ``` sudo systemctl enable myservice ``` 以上就是 CentOS 7 设置自定义开机启动服务的详细步骤。需要注意的是,服务脚本文件中的路径信息需要根据实际情况修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值