CentOS 设置 jar 程序开机自启
创建 .service 文件
假如你的 jar 包服务名称为 demo,有一个启动脚本为 demo.sh,有以下启动命令:
- ./demo.sh start
- ./demo.sh stop
- ./demo.sh restart
- ./demo.sh status
shell
# 创建一个 demo.service 文件
vi /usr/lib/systemd/system/demo.service
# 进入编辑模式后,输入下面一段内容,并保存,退出。
shell
[Unit]
#服务描述
Description=demo-jar-server
After=syslog.target network.target
[Service]
Type=forking
# 延时启动。命令会卡住指定时间后,再执行。比如:60秒。
#ExecStartPre=/bin/sleep 60
# 目录。如果你的安装路径不在 /opt/demo.sh 则需要对应修改路径。
WorkingDirectory=/opt/
# 应用启动命令,应用的启动脚本路径必须为绝对路径
ExecStart=/bin/bash ./demo.sh start
# 应用停止命令
ExecStop=/bin/bash ./demo.sh stop
# 应用重启命令
ExecReload=/bin/bash ./demo.sh restart
# 表示给应用分配独立的临时空间
PrivateTmp=true
#等待应用的启动时间,单位为秒,0表示禁用,如果在配置的时间内收到启动完成的信号,服务被认为执行失败然后自动退出
TimeoutStartSec=0
# 杀掉指定进程,none表示没有进程会被杀掉,只执行stop操作
KillMode=none
[Install]
WantedBy=multi-user.target
启动, 停止, 开机自动启动
shell
# 执行reload命令,使配置生效
systemctl daemon-reload
# 设置开机自动启动
systemctl enable demo.service
# 启动redis服务
systemctl start demo.service
# 查看服务状态
systemctl status demo.service
# 停止服务
systemctl stop demo.service
# 取消开机自动启动(卸载服务)
systemctl disable demo.service
# 查看某个服务是否是开机自启的
systemctl is-enabled demo.service
修改服务
shell
# 用 vi 编辑器修改 *.service 后,需要执行如下命令后,生效:
systemctl daemon-reload
断电重启
有时候我们的服务启动依赖其他主机上的服务,但又无法直接判断其他主机上的服务是否正常,我们只能尝试不断重启服务,直到重启成功。
知识科普:
shell
systemctl show demo.service --property ActiveState
# 服务正常的话,控制台会输出如下字样:
ActiveState=active
# 服务不正常的话,控制台会输出如下字样:
ActiveState=inactive
在 shell 中接收:
shell
eval $(systemctl show demo.service --property ActiveState)
if [ "$ActiveState" = "active" ]; then
echo "demo.service is running."
else
echo "demo.service is stopped."
fi
有了以上知识,可以在 crontab 中执行定时任务来重启服务。
编写针对 demo.service 的重启监控脚本:monitor.sh
shell
#!/bin/sh
SERVICE_NAME=demo.service
APP_HOME=/opt/demo
eval $(systemctl show $SERVICE_NAME --property ActiveState)
if [ $ActiveState = "active" ]; then
echo `date +%Y-%m-%d` `date +%H:%M:%S` "$SERVICE_NAME is running." >> $APP_HOME/logs/restart.log
else
mkdir -p $APP_HOME/logs
echo `date +%Y-%m-%d` `date +%H:%M:%S` "restart $SERVICE_NAME" >> $APP_HOME/logs/restart.log
systemctl start $SERVICE_NAME
fi
添加执行权限
shell
chmod +x monitor.sh
将 monitor.sh 脚本加入 crontab
shell
# 每30分钟执行一次
crontab -e
# 输入并保存(操作和 vim 编辑器一样)
*/30 * * * * /bin/bash /opt/demo/monitor.sh
shell
# 查看定时任务
crontab -l
# 查看定时任务执行记录
tail -f /var/log/cron -n 20
cat /var/log/cron