前言

之前的一个项目 ArxivDay,总是莫名其妙操作数据的python总是过几天就报错,于是乎打算直接弄一个每日自动关闭-重启的任务好了。

查询了发现Linux Cron适合。Gemini也给了windows的方法,但是由于我是linux,暂时不考虑Windows,但是为了如果后续的方便,也写在这里。

正文

1. Cron (Linux 系统)

在Linux上,Cron 是一个强大的后台进程,用于按预设的时间表执行任务(cron jobs)。这是最常用和最标准的方法。

1.1 创建.sh文件 并 编辑内容

首先我们需要创建一个脚本文件,这里以我们需要启动server.py服务器为例子,

touch restart_service.sh
chmod +x restart_service.sh

编辑脚本内容

#!/bin/bash

# 你的项目和虚拟环境的路径
PROJECT_DIR=<你的Project路径>
VENV_ACTIVATE_SCRIPT=<你的Venv的bin/activate路径>

# 找到你的Python服务的进程ID (PID)
PID=$(ps -ef | grep "python3 <你的python文件,server.py>" | grep -v grep | awk '{print $2}')

# 如果找到了进程,就杀掉它
if [ -n "$PID" ]; then
  echo "Stopping Python service (PID: $PID)..."
  kill -9 $PID
else
  echo "Python service was not running."
fi

# 等待一小会儿,确保进程已经完全关闭
sleep 2

# **关键步骤:激活虚拟环境**
source $VENV_ACTIVATE_SCRIPT
echo "Virtual environment activated."

# 进入你的项目目录
cd $PROJECT_DIR

# 使用虚拟环境中的 Python 启动服务
# (使用 nohup 和 & 让它在后台运行)
# 日志会输出到项目目录下的 output.log 文件
echo "Starting Python service..."
nohup python3 <你的python文件,server.py> > "$PROJECT_DIR/output.log" 2>&1 &

echo "Service restarted successfully."

# (可选) 停用虚拟环境,虽然对于脚本来说不是必须的,因为脚本执行完后会话就结束了
# deactivate

1.2 Cron Job 设置

我们先打开crontab编辑器,第一次运行的话可能会选择一个文本编辑器,我们这里选择vim(也可以nano,但是我个人比较习惯用vim)

crontab -e

在文件的末尾加一行来定义我们的计划任务:cron表达式的格式是:分 时 日 月 周 命令

# m h  dom mon dow   command
0 3 * * * /usr/bin/bash /path/to/your/restart_service.sh

cron表达式解释:

  • 0: 第0分钟。
  • 3: 凌晨3点。
  • *: 每一天。
  • *: 每一月。
  • *: 每周的每一天。
  • /usr/bin/bash /path/to/your/restart_service.sh: 你要执行的命令。请确保使用脚本的绝对路径。

2. Task Scheduler (Windows 系统)

这个版本我没有测试过,权当作是Archive,如果以后有机会在Windows用重启任务会使用,如果有大神测出来下面过程有任何问题的,请一定要联系我/或者评论!在下万分感谢!

2.1 编辑.bat脚本

和Linux一样,我们需要编辑脚本,可是对于Windows系统来说,一般是批处理脚本.bat,我们创建脚本restart_service.bat

@echo off

REM 查找并结束Python进程
REM 假设你的脚本是 server.py
echo "Stopping Python service..."
taskkill /F /IM python.exe /FI "WINDOWTITLE eq python server.py"

REM 等待2秒
timeout /t 2 /nobreak

REM 进入你的项目目录
REM 将 C:\path\to\your\project 替换为你的项目实际路径
cd C:\path\to\your\project

REM 启动Python服务
echo "Starting Python service..."
start "PythonService" python.exe server.py

echo "Service restarted successfully."

2.2 Task Scheduler 设置

  1. 打开 任务计划程序。你可以通过在开始菜单搜索 "Task Scheduler" 来找到它。
  2. 在右侧的 "操作" 窗格中,点击 "创建基本任务..."。
  3. 创建基本任务向导:
    • 名称: 给你的任务起一个名字,例如 "Daily Python Service Restart"。
    • 触发器: 选择 "每天",然后设置你希望重启的时间(例如,凌晨3:00:00)。
    • 操作: 选择 "启动程序"
    • 程序/脚本: 点击 "浏览" 并选择你刚刚创建的 restart_service.bat 脚本。
    • 完成: 点击 "完成" 前,可以勾选 "当我单击‘完成’时,打开此任务的属性对话框",以便进行高级设置。
  4. (可选) 高级设置:
    • 在 "常规" 选项卡中,选择 "不管用户是否登录都要运行" 并勾选 "使用最高权限运行"。这确保了即使你没有登录服务器,任务也能执行。系统会要求你输入账户密码。

总结

Linux 用 Cron,Windows 用 Task Scheduler!

下面是一个xiu表格:

特性Linux (Cron)Windows (Task Scheduler)
核心工具Cron Daemon任务计划程序
脚本类型Shell 脚本 (.sh)批处理脚本 (.bat)
设置方式命令行 crontab -e图形用户界面 (GUI)
可靠性非常高,行业标准非常高,系统集成

参考

[1] Gemini

Q.E.D.


立志做一个有趣的碳水化合物