You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决vsftpd每日6点定时重启却在6-7点每分钟执行的异常问题

如何解决vsftpd每日6点定时重启却在6-7点每分钟执行的异常问题

根据你提供的配置文件和系统日志,问题的核心出在vsftpd-restart.service的配置错误,以及可能的单元启用方式不当,导致systemd重复触发重启操作。以下是分步解决方案:

一、定位问题根源

从你的日志可以看到,vsftpd在6:00正常执行了一次重启,但从6:01开始每分钟都重复执行重启操作,这是因为:

  1. 你的vsftpd-restart.service的[Install]段错误地将WantedBy指向了vsftpd-restart.timer,导致systemd将service的运行状态与timer绑定,触发了不必要的循环逻辑。
  2. 可能错误地启用了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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 12:18:09