1、问题

    今天编写的一个开机自启服务(A.service),系统重启后服务启动成功,但是脚本功能未生效。

2、原因分析

    (1)首先尝试手动重启服务,服务启动成功,排除服务启动脚本功能编写错误的可能性。

    (2)系统开机后查看脚本日志输出,发现是脚本运行过程中找不到display :0,中断了。

    (3)猜测有可能是开机过程中,有一个服务(B.service)还未启动成功,就已经开始启动A.service服务。

3、解决方法

    (1)添加服务B.service在A.service服务的依赖中
1
2
3
[Unit]
After=B.service
Requires=B.service

注意:After和Requires是搭配使用的。

    (2)增加服务启动延时时间,此处设置为延时6秒。
1
2
3
[Service]
ExecStartPre=/bin/sleep 6
ExecStart=

ExecStartPre:设置在执行 ExecStart= 之前执行的命令行。 语法规则与 ExecStart= 完全相同。
sleep命令
sleep 1 睡眠1秒

sleep 1s 睡眠1秒

sleep 1m 睡眠1分钟

sleep 1h 睡眠1小时

延迟启动
[Service]标签下增加ExecStartPre=/bin/sleep 30,表示延迟30秒启动

超时时间
[Service]标签下增加TimeoutStartSec=600,表示服务启动超时时间为600秒

来源: