如何解决vsftpd每日6点定时重启却在6-7点每分钟执行的异常问题
如何解决vsftpd每日6点定时重启却在6-7点每分钟执行的异常问题
根据你提供的配置文件和系统日志,问题的核心出在vsftpd-restart.service的配置错误,以及可能的单元启用方式不当,导致systemd重复触发重启操作。以下是分步解决方案:
一、定位问题根源
从你的日志可以看到,vsftpd在6:00正常执行了一次重启,但从6:01开始每分钟都重复执行重启操作,这是因为:
- 你的
vsftpd-restart.service的[Install]段错误地将WantedBy指向了vsftpd-restart.timer,导致systemd将service的运行状态与timer绑定,触发了不必要的循环逻辑。 - 可能错误地启用了
vsftpd-restart.service单元(而非仅启用timer单元),导致systemd尝试重复启动该oneshot服务。
二、分步解决步骤
1. 修正vsftpd-restart.service配置
编辑你的service文件,移除错误的[Install]段配置(或修改为合理的系统target):
[Unit] Description=Restart vsftpd daily at 6 AM After=network.target [Service] Type=oneshot # 推荐用systemctl restart vsftpd替代stop+start,语法更简洁且原子性更强 ExecStart=/usr/bin/systemctl restart vsftpd # 移除错误的WantedBy配置:oneshot服务由timer触发,无需绑定到timer单元 # 若需系统启动时也执行一次重启,可保留以下配置并启用service,但这不是定时任务必需项 # [Install] # WantedBy=multi-user.target
2. 修复单元启用状态
首先禁用可能错误启用的service单元:
sudo systemctl disable --now vsftpd-restart.service
然后启用并启动timer单元(定时触发的核心):
sudo systemctl enable --now vsftpd-restart.timer
3. 验证timer配置
执行以下命令检查timer的状态,确认下次触发时间为次日6点:
sudo systemctl list-timers vsftpd-restart.timer
正常输出应类似:
NEXT LEFT LAST PASSED UNIT ACTIVATES Mon 2024-10-08 06:00:00 CST 19h left Sun 2024-10-07 06:00:00 CST 2h ago vsftpd-restart.timer vsftpd-restart.service
4. 排查其他潜在触发源
如果问题仍未解决,检查是否存在其他定时任务触发重启:
- 检查当前用户和root用户的cron任务:
crontab -l sudo crontab -l - 列出所有systemd定时器,确认没有其他单元在每分钟触发操作:
sudo systemctl list-timers --all
三、验证修复效果
等待次日6点,或手动触发测试:
# 手动触发一次service执行 sudo systemctl start vsftpd-restart.service
然后查看vsftpd的日志,确认仅执行一次重启操作:
journalctl -u vsftpd.service --since "10 minutes ago"
备注:内容来源于stack exchange,提问作者Setyawan
相关产品推荐
相关产品推荐

