Linux Shell定时检查日期执行Python脚本
Linux下的Shell语句每半小时检查一次当前的日期,如果当前的日期是开始运行时日期的第2天,则自动运行一段Python语句。
此方案使用标准的Bash日期计算,兼容主流Linux发行版(CentOS/Ubuntu等),通过睡眠循环实现定时检查,避免依赖外部定时任务。
#!/bin/bash# 获取脚本启动时的日期(格式:YYYY-MM-DD)
START_DATE=$(date +%F)# 计算第二天的日期
TARGET_DATE=$(date -d "$START_DATE +1 day" +%F)echo "脚本启动日期: $START_DATE"
echo "目标执行日期: $TARGET_DATE"while true; do# 获取当前日期CURRENT_DATE=$(date +%F)# 检查是否到达目标日期if [[ "$CURRENT_DATE" == "$TARGET_DATE" ]]; thenecho "当前日期 $CURRENT_DATE 是启动日期的第二天,开始执行Python脚本..."# 在此处替换为你要执行的Python命令# 示例: python3 /path/to/your_script.pypython3 -c "print('Hello from Python! Today is ' + '$CURRENT_DATE')"echo "Python脚本执行完成"break # 执行后退出循环elif [[ "$CURRENT_DATE" > "$TARGET_DATE" ]]; thenecho "当前日期 $CURRENT_DATE 已超过目标日期 $TARGET_DATE,退出检查"breakelseecho "当前日期 $CURRENT_DATE 未到目标日期,继续等待..."fi# 等待30分钟(1800秒)sleep 1800
done
使用说明:
-
保存脚本(例如
date_checker.sh
):nano date_checker.sh
粘贴上述内容后保存退出
-
添加执行权限:
chmod +x date_checker.sh
-
修改Python命令:
在脚本中找到以下行,替换为实际需要执行的Python命令:python3 -c "print('Hello from Python! Today is ' + '$CURRENT_DATE')"
示例替换:
python3 /home/user/my_script.py
-
运行脚本:
./date_checker.sh
工作流程:
- 启动时记录当前日期(如2025-08-17)
- 计算目标日期(2025-08-18)
- 每30分钟检查一次当前日期
- 当检测到当前日期为目标日期时:
- 执行指定的Python命令
- 退出循环结束脚本
- 如果当前日期已超过目标日期,直接退出
注意事项:
- 长期运行:若需持续后台运行,建议配合
nohup
:nohup ./date_checker.sh > log.txt 2>&1 &
- 时区处理:脚本使用系统时区,确保系统时间设置正确
- 日期格式:使用ISO 8601格式(YYYY-MM-DD)避免歧义
- 日志查看:输出信息包含日期检查状态,便于调试
测试验证:
- 快速测试(修改等待时间为10秒):
# 将 sleep 1800 改为: sleep 10
- 手动修改系统时间测试(需要root权限):
sudo date -s "2025-08-18 00:00:00"