惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
T
The Blog of Author Tim Ferriss
aimingoo的专栏
aimingoo的专栏
M
MIT News - Artificial intelligence
N
Netflix TechBlog - Medium
Y
Y Combinator Blog
B
Blog RSS Feed
H
Help Net Security
Blog — PlanetScale
Blog — PlanetScale
Vercel News
Vercel News
Google DeepMind News
Google DeepMind News
Microsoft Security Blog
Microsoft Security Blog
G
Google Developers Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 司徒正美
L
LangChain Blog
IT之家
IT之家
F
Fortinet All Blogs
V
V2EX
C
Check Point Blog
The Cloudflare Blog
博客园_首页
阮一峰的网络日志
阮一峰的网络日志
A
About on SuperTechFans

博客园 - lizhigang

DBeaver 打开 utf8的sql文件 SMT 贴片机与 MES 系统集成指南 容器访问外部服务(10.100.1.90:9090)防火墙规则配置总结 Docker 容器间通信故障排查与修复操作总结 Docker 容器部署与运维总结报告 Nginx Docker 容器白名单配置操作总结 使用 pnpm 构建 Vue2 项目操作总结(Node 16 → Node 22) 前端项目 Docker 镜像构建完整操作总结 Windows 11 下使用 MySQL Workbench 还原多数据库备份文件操作指南 在 WSL2 + Docker Desktop 环境下构建前后端 Docker 镜像 从内网私有仓库迁移镜像到阿里云 ACR 完整指南 wsl网络设置允许访问ssh(端口22) 在 Windows 11 上安装 Docker Nginx配置 访问数据库报错 Windows系统运行RuoYi-Vue完整指南 RuoYi-Vue 项目结构分析 win11 报错 windows 11 如何使用 Microsoft Hyper-V VMware 替代产品 IntelliJ IDEA 社区版支持 Spring Boot 开发说明文档 imes开发部署(IDEA社区版 差异) IntelliJ IDEA 社区版默认支持 Spring Boot 吗? imes开发部署 IDEA 端口被占用 解决办法 使用MySQL Workbench进行数据库备份 ruoyi-nbcio ktg-mes、ktm-mes-ui部署 Widows下安装和配置Redis Windows下Redis安装与配置全攻略
SOP服务程序启动脚本修复及开机自启配置标准操作流程(SOP)
lizhigang · 2026-08-27 · via 博客园 - lizhigang

SOP服务程序启动脚本修复及开机自启配置标准操作流程(SOP)


一、问题背景

在部署 SOP服务程序(对应 ssc-management.jar)时,执行其重启脚本 restart-withlog.sh 遇到多个异常,且开机自启配置存在重复项,导致服务无法稳定运行。本流程旨在标准化解决此类问题,适用于所有 SOP 系列服务的维护操作。


二、常见故障现象

  • 脚本执行报错 $'\r': command not foundsleep: invalid time interval '2\r'
    → 脚本格式包含 Windows 换行符(CRLF)。
  • 日志路径不存在(如 /usr/local/ssc/logs/management.log
    → 缺少日志目录。
  • kill: Operation not permitted
    → 旧进程由 root 启动,当前普通用户无权终止。
  • crontab 中出现多条完全相同的开机启动项
    → 导致重启时脚本被执行多次,引发冲突。

三、操作步骤(按常规执行顺序)

阶段一:修复脚本即时运行问题

1. 转换脚本格式(去除 \r

sed -i 's/\r$//' restart-withlog.sh

也可使用 dos2unix restart-withlog.sh(若已安装)。

2. 创建日志目录并设置权限

sudo mkdir -p /usr/local/ssc/logs
sudo chown <部署用户>:<部署用户> /usr/local/ssc/logs   # 替换为实际用户名

确保 SOP 服务程序有权写入该目录。

3. 赋予脚本执行权限(为后续开机自启做准备)

chmod +x /usr/local/ssc/ssc-management/restart.sh

阶段二:解决权限问题并配置开机自启

由于旧进程可能归属 root,普通用户无法强制终止,建议将开机自启任务提升至 root 用户执行。

4. 删除当前用户(如 inspur)crontab 中的自启项

crontab -l | grep -v 'restart.sh' | crontab -

验证:

crontab -l | grep restart   # 应无输出

5. 将开机启动项添加到 root 的 crontab

(sudo crontab -l 2>/dev/null; echo "@reboot /usr/local/ssc/ssc-management/restart.sh") | sudo crontab -

6. 清理重复条目(如有)

查看当前 root 的 crontab 自启项:

sudo crontab -l | grep restart

若发现重复行(例如两行完全相同的 /usr/local/ssc/ssc-management/restart.sh),执行去重:

sudo crontab -l | awk '!seen[$0]++' | sudo crontab -

最终应确保每个服务只有一条 @reboot 记录。


阶段三:验证服务状态

完成上述操作后,可通过以下方式确认 SOP 服务是否正常启动:

1. 检查进程

ps -ef | grep ssc-management.jar | grep -v grep
# 或
pgrep -f ssc-management.jar

2. 检查端口监听(假设服务端口为 8080)

netstat -tlnp | grep :8080
# 或
ss -tlnp | grep :8080

3. 查看应用启动日志

tail -f /usr/local/ssc/logs/management.log

4. 使用 jps 命令(若 JDK 已安装)

jps -l | grep ssc-management

四、核心脚本参考(restart.shrestart-withlog.sh

#!/bin/bash
# 强制终止旧进程
ps -ef | grep 'ssc-management.jar' | grep -v grep | awk '{print $2}' | xargs kill -9

echo "请稍后……"
sleep 2

cd /usr/local/ssc/ssc-management/
nohup java -jar ssc-management.jar > /usr/local/ssc/logs/management.log 2>&1 &

日志目录必须提前存在,否则启动会失败(已在阶段一处理)。


五、注意事项

  • kill -9 为强制终止,可能导致数据丢失或资源未释放,生产环境建议改用 kill -15 配合应用自身的优雅关闭机制。
  • @reboot 在系统启动时执行,若脚本依赖网络、数据库等外部服务,应在脚本中添加适当延迟或健康检查逻辑。
  • 若需更规范的管理方式,建议将 SOP 服务封装为 systemd 服务单元,便于统一管理启动、停止、状态和日志。
  • 修改 crontab 后无需重启系统,cron 守护进程会自动检测文件变更。

六、总结

通过本 SOP 流程,我们依次:

  1. 修复了脚本格式和日志路径问题;
  2. 将开机自启权限提升至 root,消除了 kill 权限不足的障碍;
  3. 清理了重复的 crontab 条目,避免服务重复启动;
  4. 提供了完整的验证方法,确保 SOP 服务程序稳定运行。

现在,系统重启后 SOP 服务程序 将以 root 身份自动启动,日志完整可查,维护工作更加可靠高效。