树莓派 cron 定时任务 设置定时开关脚本 我的是有图形界面(tk) 系统环境

  • cron 是 Linux/Unix 系统里的一个守护进程(后台程序),专门用来定时执行你指定的任务(命令、脚本等)。

  • 你把想定时执行的命令写到crontab(cron 表)里,cron 会根据你设定的时间点自动触发执行。

测试脚本:main.py

import tkinter as tk
from datetime import datetime

def update_time():
    now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    label.config(text=now)
    root.after(1000, update_time)  # 每1000毫秒(1秒)更新一次

root = tk.Tk()
root.title("当前时间显示")
root.geometry("300x100")

label = tk.Label(root, text="", font=("Helvetica", 18))
label.pack(expand=True)

update_time()  # 初次调用

root.mainloop()

1. 环境准备:

确认程序能手动运行并显示界面(在这里注意我的路径和你的路径是否有区别 )

/usr/bin/python3 /home/admin/StampFeedDetect/main.py

  确认当前桌面环境的环境变量:

echo $DISPLAY
echo $XAUTHORITY       

  echo $DISPLAY          # 一般是 :0
  echo $XAUTHORITY       # 一般是 /home/admin/.Xauthority

2. 创建日志目录(如果没创建)

mkdir -p /home/admin/StampFeedDetect/logs

3. 编写启动脚本 start_main.sh

#!/bin/bash

export DISPLAY=:0
export XAUTHORITY=/home/admin/.Xauthority

cd /home/admin/StampFeedDetect

LOGFILE="/home/admin/StampFeedDetect/logs/schedule.log"
MAIN_SCRIPT="/home/admin/StampFeedDetect/main.py"

echo "[START] $(date '+%Y-%m-%d %H:%M:%S') - Starting main.py" >> "$LOGFILE"

nohup /usr/bin/python3 "$MAIN_SCRIPT" >> /home/admin/StampFeedDetect/logs/main_output.log 2>&1 &

PID=$!
echo "$PID" > /home/admin/StampFeedDetect/main.pid
echo "Started with PID $PID" >> "$LOGFILE"

给脚本加执行权限:

chmod +x /home/admin/StampFeedDetect/start_main.sh

4. 编写停止脚本 stop_main.sh

#!/bin/bash

export DISPLAY=:0
export XAUTHORITY=/home/admin/.Xauthority

LOGFILE="/home/admin/StampFeedDetect/logs/schedule.log"
PIDFILE="/home/admin/StampFeedDetect/main.pid"

if [ ! -f "$PIDFILE" ]; then
  echo "[STOP] $(date '+%Y-%m-%d %H:%M:%S') - No PID file found. Process might not be running." >> "$LOGFILE"
  exit 1
fi

PID=$(cat "$PIDFILE")

if ps -p $PID > /dev/null 2>&1; then
  kill $PID
  echo "[STOP] $(date '+%Y-%m-%d %H:%M:%S') - Stopped main.py with PID $PID" >> "$LOGFILE"
  rm "$PIDFILE"
else
  echo "[STOP] $(date '+%Y-%m-%d %H:%M:%S') - Process with PID $PID not found. Maybe already stopped." >> "$LOGFILE"
  rm "$PIDFILE"
fi

同样给执行权限:

chmod +x /home/admin/StampFeedDetect/stop_main.sh

5. 编辑用户的 crontab

crontab -e

添加定时任务(比如每天 21:49 启动,21:50 停止)/  先测试

49 21 * * * DISPLAY=:0 XAUTHORITY=/home/admin/.Xauthority /home/admin/StampFeedDetect/start_main.sh
50 21 * * * DISPLAY=:0 XAUTHORITY=/home/admin/.Xauthority /home/admin/StampFeedDetect/stop_main.sh

6. 验证

手动运行启动脚本

bash /home/admin/StampFeedDetect/start_main.sh

检查日志:

cat /home/admin/StampFeedDetect/logs/schedule.log
cat /home/admin/StampFeedDetect/logs/main_output.log

查看进程:

ps -p $(cat /home/admin/StampFeedDetect/main.pid)

手动停止:

bash /home/admin/StampFeedDetect/stop_main.sh

 7. 注意事项

  • 确保脚本文件用的是 Unix 格式换行,避免 Windows 格式导致执行失败

  • 确保 mainn.py 程序无异常能正常启动和退出

  • 如果你使用其他显示(非 :0),需调整 DISPLAY

  • 日志文件会积累,可以定期清理

8.  关闭定时任务

执行命令编辑当前用户的定时任务

crontab -e

找到你之前添加的定时任务行,比如:

49 21 * * * DISPLAY=:0 XAUTHORITY=/home/admin/.Xauthority /home/admin/StampFeedDetect/start_mainn.sh
50 21 * * * DISPLAY=:0 XAUTHORITY=/home/admin/.Xauthority /home/admin/StampFeedDetect/stop_mainn.sh
然后注释掉就可以 

你可能感兴趣的:(树莓派,linux,python)