前言
之前的一个项目 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 设置
- 打开 任务计划程序。你可以通过在开始菜单搜索 "Task Scheduler" 来找到它。
- 在右侧的 "操作" 窗格中,点击 "创建基本任务..."。
- 创建基本任务向导:
- 名称: 给你的任务起一个名字,例如 "Daily Python Service Restart"。
- 触发器: 选择 "每天",然后设置你希望重启的时间(例如,凌晨3:00:00)。
- 操作: 选择 "启动程序"。
- 程序/脚本: 点击 "浏览" 并选择你刚刚创建的 restart_service.bat 脚本。
- 完成: 点击 "完成" 前,可以勾选 "当我单击‘完成’时,打开此任务的属性对话框",以便进行高级设置。
- (可选) 高级设置:
- 在 "常规" 选项卡中,选择 "不管用户是否登录都要运行" 并勾选 "使用最高权限运行"。这确保了即使你没有登录服务器,任务也能执行。系统会要求你输入账户密码。
总结
Linux 用 Cron,Windows 用 Task Scheduler!
下面是一个xiu表格:
特性 | Linux (Cron) | Windows (Task Scheduler) |
---|---|---|
核心工具 | Cron Daemon | 任务计划程序 |
脚本类型 | Shell 脚本 (.sh ) | 批处理脚本 (.bat ) |
设置方式 | 命令行 crontab -e | 图形用户界面 (GUI) |
可靠性 | 非常高,行业标准 | 非常高,系统集成 |
参考
[1] Gemini
Q.E.D.