Linux 把启动脚本制作成系统服务(通过 systemctl start xxx 启动)
描述
正常我们启动某一个应用时,会新建一个sh脚本,每次调用起来和设置开机自启会非常麻烦
所以把这个启动文件制作成系统服务,每次启动只需要输入以下命令就可以启动
systemctl start xxx
也可以设置开机自启
systemctl enable xxx
接下来我拿Redis来演示,我用的Redis是离线软件包解压后的。
操作
1、进入到Redis目录,确保你制作的Redis脚本能够正常执行。
脚本名字为 startRedis.sh
脚本内容:
#!/usr/bin/env bash
src/redis-server ./redis.conf
2、创建 systemd 服务文件
# vi /etc/systemd/system/服务名称.service
例如:
vi /etc/systemd/system/redisServer.service
注意:后面的文件名,将是启动命令时用到的名称。
3、写入以下内容模板
[Unit]
# 服务描述
Description=这是一个服务描述,可以描述此服务是那个应用的
# 可选:替换为你的文档地址
# Documentation=https://your-docs-url.comAfter=network.target nss-lookup.target
Wants=network.target[Service]
Type=simple
# 建议使用专用用户运行,提高安全性(先创建用户: sudo useradd -r -s /bin/false cloudadmin)
# User=cloudadmin
# Group=cloudadmin# 工作目录,这里设置后,脚本中的相对路径就基于此目录
WorkingDirectory=/opt/redis/redis-3.2.11# 启动命令(使用绝对路径更可靠)
ExecStart=/opt/redis/redis-3.2.11/startRedis.sh# 停止命令:向Java进程发送SIGTERM信号实现优雅关闭
ExecStop=/bin/kill -15 $MAINPID# 如果应用无法正常停止,在90秒后强制杀死进程
TimeoutStopSec=90# 崩溃后自动重启
Restart=on-failure
RestartSec=10# 防止无限重启(5分钟内重启超过5次则放弃)
StartLimitInterval=300
StartLimitBurst=5# 环境变量(可选)
# Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk"
# Environment="SPRING_PROFILES_ACTIVE=prod"# 日志配置
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=cloud-admin# 安全限制(可选)
LimitNOFILE=65536[Install]
WantedBy=multi-user.target
4、重载刷新服务配置
systemctl daemon-reload
5、测试
启动服务
systemctl start redisServer
查看服务状态
systemctl status redisServer
重启服务
systemctl restart redisServer
停止服务
systemctl stop redisServer
设置开机自启
systemctl enable redisServer
查看开机是否自启
systemctl is-enabled redisServer
查看完整日志
journalctl -u redisServer
查看最近100条日志
journalctl -u redisServer -n 100
实时追踪日志
journalctl -u redisServer -f
更详细的配置模板
[Unit]
Description=Cloud Admin Application Service
After=network.target syslog.target
Requires=network.target[Service]
Type=simple
WorkingDirectory=/opt/cloud-admin# 直接使用java命令,避免额外脚本
ExecStart=/usr/bin/java -Dspring.config.location="config/application.yml,config/application-druid.yml" -jar cloud-admin.jar
ExecStop=/bin/kill -15 $MAINPID# 在启动前做一些检查(可选)
ExecStartPre=/bin/sleep 3
ExecStartPre=/bin/echo "Starting Cloud Admin Service"SuccessExitStatus=143 # Tomcat/JVM 通常以此状态退出# 资源限制(根据你的服务器配置调整)
LimitNOFILE=65536
LimitNPROC=4096Restart=on-failure
RestartSec=30# 环境文件(可以创建 /etc/sysconfig/cloud-admin)
EnvironmentFile=-/etc/sysconfig/cloud-admin[Install]
WantedBy=multi-user.target