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

如何在Unix服务器无权限下创建重启后生效的Python定时任务

Unix系统实现定时执行Python脚本的解决方案

一、解决crontab被PAM限制的无权限定时方案

当你因PAM配置无法使用crontab时,systemd用户定时器是无需root权限的最优解,且服务器重启后任务会自动恢复。

1. 准备Python脚本

假设脚本路径为~/scripts/daily_task.py:

  • 给脚本添加执行权限:
    chmod +x ~/scripts/daily_task.py
    
  • 在脚本开头添加shebang(指定Python解释器,用which python3获取路径):
    #!/usr/bin/env python3
    # 你的脚本业务逻辑
    

2. 创建systemd服务单元

在用户目录的systemd配置文件夹下创建服务文件~/.config/systemd/user/daily-python-task.service:

[Unit]
Description=每日执行Python脚本任务

[Service]
Type=oneshot
# 替换为你的Python解释器路径和脚本路径
ExecStart=/usr/bin/env python3 ~/scripts/daily_task.py
WorkingDirectory=~/scripts
# 可选:将日志输出到指定文件,方便排查问题
StandardOutput=append:~/scripts/task_output.log
StandardError=append:~/scripts/task_error.log

3. 创建systemd定时器单元

创建定时器文件~/.config/systemd/user/daily-python-task.timer,设置每日执行时间(示例为凌晨2点):

[Unit]
Description=每日凌晨2点触发Python任务

[Timer]
# 定时规则:每天02:00执行
OnCalendar=daily *-*-* 02:00:00
# Persistent=true表示如果服务器在定时时间点处于关机状态,开机后会补执行一次
Persistent=true

[Install]
WantedBy=timers.target

4. 启用并启动定时器

执行以下命令加载配置并启用开机自启:

# 重新加载用户级systemd配置
systemctl --user daemon-reload
# 启用并立即启动定时器
systemctl --user enable --now daily-python-task.timer

验证状态

查看定时器是否正常运行:

systemctl --user list-timers daily-python-task.timer

二、用systemd服务实现定时(备选方案)

如果想直接通过systemd服务结合脚本内置定时逻辑实现(不推荐,占用进程资源),可按以下步骤操作:

1. 编写带定时逻辑的Python脚本

#!/usr/bin/env python3
import time
from datetime import datetime, timedelta

def execute_task():
    # 替换为你的任务代码
    print(f"任务执行于: {datetime.now()}")

def main():
    while True:
        now = datetime.now()
        # 设置下一次执行时间为次日凌晨2点
        next_run = now.replace(hour=2, minute=0, second=0, microsecond=0)
        if next_run <= now:
            next_run += timedelta(days=1)
        # 等待到执行时间
        time.sleep((next_run - now).total_seconds())
        execute_task()

if __name__ == "__main__":
    main()

2. 创建systemd守护进程服务

创建~/.config/systemd/user/python-scheduled-daemon.service:

[Unit]
Description=内置定时逻辑的Python守护进程

[Service]
Type=simple
ExecStart=/usr/bin/env python3 ~/scripts/daily_task_daemon.py
Restart=always  # 进程意外退出时自动重启
WorkingDirectory=~/scripts
StandardOutput=append:~/scripts/daemon_output.log
StandardError=append:~/scripts/daemon_error.log

[Install]
WantedBy=default.target

3. 启用服务

systemctl --user daemon-reload
systemctl --user enable --now python-scheduled-daemon.service

注意事项

  • 优先选择systemd定时器方案,资源占用更低、可靠性更高。
  • 确保Python解释器路径正确,可通过which python3命令确认后替换配置中的路径。

内容的提问来源于stack exchange,提问作者Akanksha_p

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:24:19