systemd延时启动服务
原因:我的docker容器链接了硬盘上的一个文件夹,但是docker服务在硬盘没有挂载前就启动,容器在目录下自动生成了链接文件夹,导致系统挂载的硬盘名改变,延时启动可以解决这个问题,方法如下:
编辑/lib/systemd/system/docker.service
文件
[Service]
#在这里添加下面两行,就可以延时5分钟启动服务
TimeoutStartSec=infinity
ExecStartPre=/bin/sleep 300
感谢作者! 原文如下:
原因:我们的linux服务器上可能会有许多服务要启动,如果再开机后要立即启动的服务过多,很可能会造成开机速度过慢,这时可以对不同的服务进行时间安排,有序的延迟一部分服务的启动。
这里以透传软件 frpc.service 为例。
一、单配置文件的实现模式
也就是直接对frpc.service进行配置
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
User=nobody
# 下面两行设定了再开机后300秒再启动服务
TimeoutStartSec=infinity
ExecStartPre=/bin/sleep 300
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini
ExecReload=/usr/bin/frpc reload -c /etc/frp/frpc.ini
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
二、利用额外的timer服务实现
这样做的好处是,可以额外增加一项设定,配置服务再持续运行24、48小时后重启一次,用于不关机,但需要对某个服务进行定期重启的情况。
- 对 frpc.service 进行修改
[Unit]
Description=Frp Client Service
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini
ExecReload=/usr/bin/frpc reload -c /etc/frp/frpc.ini
LimitNOFILE=1048576
注意,这里的frpc.service 中没有 [Install] 这一部分的设置!!!
- 新建一个用于启动frpc.service的timer
vim /lib/systemd/system/frpc.timer
[Unit]
Description=timer for frpc service
[Timer]
OnBootSec=5min
OnUnitActiveSec=24h
[Install]
WantedBy=timers.target
这里设定了frpc.service 在开机后5分钟再启动,并且运行24小时后重启一次
- 启动相关的服务
systemctl disable frpc.service # 如果frpc.service 之前不是enable状态,则不需要这一步
systemctl start frpc.timer
systemctl enable frpc.timer