现场是这样的。脚本手动执行完全正常,用服务管理器启动却报超时失败,状态显示启动操作超时,进程其实已经在跑。

把日志和配置对完,能解释这个现象的基本就这几处。程序是后台常驻模式,单元却按简单类型声明;没有正确返回主进程,管理器一直等不到结果;启动耗时超过默认超时时间。

上来先看单元里的类型定义

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。

这里还有个坑。守护型程序要么在单元里声明对应类型,要么改成前台运行,两者混用就会出现这种假失败。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189