Linux创建服务并设置开机自启
以下为尝试做的一个服务,仅做参考
前提条件
- 存在/home目录
- 已安装java并配置了环境变量
存放位置
- jar文件:/home
- sh文件:/root
- service文件:/usr/lib/systemd/system
保活脚本
文件名:swp-exchange-stay-active.sh
# ! /bin/sh
SERVICE_PATH="/home"
SERVICE_LIST=(swp-exchange.jar swp-exchange-edit.jar)
# 替换为项目中服务器的IP地址或域名
SERVICE_URL="http://backend.swpiot.local/ews/ewsConfig"
LOG_FILE="/home/swp_exchange_active.log"
# 替换为项目中服务器java的绝对路径
JAVA_PATH="/usr/java/jdk1.8.0_321/bin/java"
cd $SERVICE_PATH
while true
do
for SERVICE in ${SERVICE_LIST[*]}; do
procnum=`ps -ef | grep $SERVICE | grep -v grep | wc -l`
# echo `date +%Y-%m-%d` `date +%H:%M:%S` $SERVICE "进程数:" $procnum >>$LOG_FILE
if [ $procnum -eq 0 ];then
if [ $SERVICE == "swp-exchange.jar" ];then
nohup $JAVA_PATH -jar $SERVICE -uc $SERVICE_URL -dc 180 -si 120000 -sm 1 >/dev/null 2>&1 &
echo `date +%Y-%m-%d` `date +%H:%M:%S` "启动进程:" $SERVICE >>$LOG_FILE
else
nohup $JAVA_PATH -jar $SERVICE -uc $SERVICE_URL >/dev/null 2>&1 &
echo `date +%Y-%m-%d` `date +%H:%M:%S` "启动进程:" $SERVICE >>$LOG_FILE
fi
elif [ $procnum -gt 1 ];then
echo `date +%Y-%m-%d` `date +%H:%M:%S` "当前程序:" $SERVICE "占用进程数:" $procnum >>$LOG_FILE
pkill -f $SERVICE
echo `date +%Y-%m-%d` `date +%H:%M:%S` "已结束进程:" $SERVICE >>$LOG_FILE
fi
done
sleep 120 # 每120秒检查一轮
done
服务脚本
文件名:swp-exchange-stay-active.service
[Unit]
Description=Swp-ExchangeStayActive
After=network.target
[Service]
Type=forking
ExecStartPre=/bin/sleep 10s
ExecStart=/bin/bash -c 'nohup sh /root/swp-exchange-stay-active.sh >/dev/null 2>&1 &'
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
TimeoutStartSec=30s
KillMode=control-group
Restart=always
RestartSec=5s
PrivateTmp=true
[Install]
WantedBy=multi-user.target
操作步骤
-
上传swp-exchange-stay-active.sh、swp-exchange-stay-active.service文件至服务器任意目录下
-
授予swp-exchange-stay-active.sh、swp-exchange-stay-active.service文件读写执行权限
chmod 777 swp-exchange-stay-active.sh chmod 777 swp-exchange-stay-active.service
-
将swp-exchange-stay-active.sh文件移动至服务器/root目录下
mv swp-exchange-stay-active.sh /root
-
将swp-exchange-stay-active.service文件放到服务器/usr/lib/systemd/system目录下
mv swp-exchange-stay-active.service /usr/lib/systemd/system
-
设置开机启动
cd /usr/lib/systemd/system systemctl enable swp-exchange-stay-active.service
-
重新加载文件
systemctl daemon-reload
-
启动服务
systemctl start swp-exchange-stay-active.service
-
验证服务是否启动
systemctl status swp-exchange-stay-active.service
-
验证线程是否运行成功
ps -ef | grep swp
其他服务操作
开启服务:
systemctl start swp-exchange-stay-active.service
关闭服务:
systemctl stop swp-exchange-stay-active.service
重启服务:
systemctl restart swp-exchange-stay-active.service
查看状态:
systemctl status swp-exchange-stay-active.service
本文作者:MerlinBK
本文链接:https://www.cnblogs.com/MerlinBK/p/17516746.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南