现场是这样的。脚本手动执行完全正常,用服务管理器启动却报超时失败,状态显示启动操作超时,进程其实已经在跑。
把日志和配置对完,能解释这个现象的基本就这几处。程序是后台常驻模式,单元却按简单类型声明;没有正确返回主进程,管理器一直等不到结果;启动耗时超过默认超时时间。
上来先看单元里的类型定义
systemctl cat app | grep -E 'Type|ExecStart'
再往下按实际启动方式改类型
systemctl edit app
延长启动超时
grep -n TimeoutStartSec /etc/systemd/system/app.service
等前面都确认过,再重载并验证状态
systemctl daemon-reload && systemctl restart app
命令输出我都留了记录,免得改完记不清原来的值。
改之前先确认了最近有没有人动过配置,避免白查一遍。
怎么算真的好了,看的是同一批现象。服务一次启动成功,状态为运行中,查询状态返回 active。
这里还有个坑。守护型程序要么在单元里声明对应类型,要么改成前台运行,两者混用就会出现这种假失败。这类问题最好一次改到位,反复小改反而容易把原因搅混。