# 定时关机脚本 **Repository Path**: project_zz/scheduled-shutdown-script ## Basic Information - **Project Name**: 定时关机脚本 - **Description**: linux系统用的定时关机脚本,为了防止忘了关机而导致费电,让AI给写了个脚本,多番修改后终于可以用了😄 - **Primary Language**: Shell - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-26 - **Last Updated**: 2025-12-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 定时关机脚本 一个简单的倒计时关机脚本,提供图形界面倒计时对话框,支持取消操作,使用 cron 实现定时执行。 ## 功能特性 - 🕐 5分钟倒计时(可自定义) - 🖥️ 图形界面进度条显示 - ❌ 支持取消倒计时操作 - ⏰ 每天定时自动执行 - 🔄 使用 cron 实现定时功能 - 📋 简单的部署和管理脚本 - 🏠 脚本内置环境变量,无需额外配置 ## 文件说明 - `countdown-shutdown.sh` - 主脚本文件(内置环境变量) - `manage-cron.sh` - cron 定时任务管理脚本 - `README.md` - 说明文档 ## 系统要求 - Linux 系统 - zenity(图形界面工具) - cron 支持 ## 安装步骤 ### 1. 安装依赖 ```bash # Arch Linux/Manjaro sudo pacman -S zenity # Ubuntu/Debian sudo apt install zenity # CentOS/RHEL sudo yum install zenity ``` ### 2. 设置脚本权限 ```bash chmod +x countdown-shutdown.sh chmod +x manage-cron.sh ``` ## 使用方法 ### 1. 配置定时时间 编辑 `manage-cron.sh` 文件中的 `SHUTDOWN_TIME` 变量: ```bash # 在这里修改定时执行时间 (格式: HH:MM) SHUTDOWN_TIME="20:00" ``` ### 2. 部署定时任务 ```bash # 部署定时任务(需要 root 权限) sudo ./manage-cron.sh deploy # 查看状态(无需 sudo) ./manage-cron.sh status # 取消部署(需要 root 权限) sudo ./manage-cron.sh undeploy ``` ### 3. 手动执行测试 ```bash # 手动测试脚本 sudo ./countdown-shutdown.sh ``` ## 配置说明 ### 修改倒计时时间 编辑 `countdown-shutdown.sh` 文件中的 `COUNTDOWN_SECONDS` 变量: ```bash COUNTDOWN_SECONDS=300 # 5分钟(默认) COUNTDOWN_SECONDS=600 # 10分钟 COUNTDOWN_SECONDS=1800 # 30分钟 ``` ### 修改定时执行时间 编辑 `manage-cron.sh` 文件中的 `SHUTDOWN_TIME` 变量: ```bash SHUTDOWN_TIME="20:00" # 每天20:00 SHUTDOWN_TIME="22:30" # 每天22:30 SHUTDOWN_TIME="08:15" # 每天08:15 ``` ## 管理命令 ### 部署管理 ```bash # 部署定时任务(需要 root 权限) sudo ./manage-cron.sh deploy # 查看当前状态(无需 sudo) ./manage-cron.sh status # 取消部署(需要 root 权限) sudo ./manage-cron.sh undeploy # 显示帮助 ./manage-cron.sh help ``` ### Cron 任务管理 ```bash # 查看所有 cron 任务 sudo crontab -l # 编辑 cron 任务 sudo crontab -e # 删除所有 cron 任务 sudo crontab -r ``` ## 部署位置 Cron 部署会将任务添加到: - **脚本**:保持原位置(内置环境变量) - **定时任务**:root 用户的 crontab ## 状态信息 运行 `./manage-cron.sh status` 会显示: - 脚本路径和执行权限 - 设置的定时时间 - 定时任务部署状态 - 当前所有 cron 任务 ## 工作原理 ### 环境变量处理 脚本自动设置图形界面所需的环境变量: ```bash export DISPLAY=:0 export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus ``` ### 执行流程 1. **定时触发**:cron 在指定时间启动脚本 2. **环境设置**:脚本自动设置图形界面环境变量 3. **图形界面**:zenity 显示倒计时对话框 4. **用户选择**:确认关机或取消操作 ### Cron 优势 - ✅ **简单易用**:配置简单,容易理解 - ✅ **调试方便**:日志查看直接 - ✅ **兼容性好**:几乎所有 Linux 系统都支持 - ✅ **维护容易**:问题排查简单 ## 故障排除 ### 1. 脚本无法执行 ```bash # 检查文件权限 ls -la countdown-shutdown.sh # 添加执行权限 chmod +x countdown-shutdown.sh ``` ### 2. 定时任务不工作 ```bash # 检查 cron 服务状态 sudo systemctl status cron # 查看 cron 日志 sudo tail -f /var/log/syslog | grep CRON # 检查 cron 任务 sudo crontab -l ``` ### 3. 图形界面不显示 ```bash # 确认 zenity 已安装 which zenity # 检查 DISPLAY 环境变量 echo $DISPLAY # 检查用户ID id -u # 检查脚本中的环境变量设置 grep -n "export" countdown-shutdown.sh ``` ### 4. 权限问题 ```bash # 确保脚本有执行关机的权限 # 需要以 root 权限运行或配置 sudo 免密码 sudo ./countdown-shutdown.sh ``` ### 5. 环境变量问题 脚本已内置环境变量,但仍可手动检查: ```bash # 检查脚本中的环境变量设置 grep -A2 -B2 "export" countdown-shutdown.sh # 手动测试环境变量 export DISPLAY=:0 export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus zenity --info --text="测试" --title="环境变量测试" ``` ### 6. 部署失败 ```bash # 检查 cron 服务 sudo systemctl status cron # 启动 cron 服务 sudo systemctl start cron # 检查 PAM 配置 sudo cat /etc/cron.allow 2>/dev/null || echo "无 cron.allow 文件" sudo cat /etc/cron.deny 2>/dev/null || echo "无 cron.deny 文件" ``` ## 注意事项 - ⚠️ **重要**: 脚本会执行关机操作,请谨慎使用 - 🔒 **权限要求**: 部署和取消部署必须使用 `sudo` - 💡 建议先手动测试脚本功能 - 📝 倒计时过程中可以随时取消 - 🔄 修改时间后需要重新部署定时任务 - 🏠 脚本已内置环境变量,无需额外配置 - 🛡️ 定时任务将以 root 权限执行关机操作 - 📅 Cron 任务每天定时执行,错过时间不会补执行 ## 卸载方法 ```bash # 取消部署定时任务(需要 root 权限) sudo ./manage-cron.sh undeploy # 删除脚本文件(可选) rm countdown-shutdown.sh manage-cron.sh ``` ## 许可证 MIT License