auto commit by corn
背景
代码丢了,mac 系统出问题,概率低吧,但是遇到了两次(第一次:升级过程中无限重启;第二次:密码无法登录,管理员也无法重置【重置不生效出问题了】)
每次丢很多东西(都是自己学习总结整理),心痛~,还好没丢公司的,不然就嗝屁了
添加 corn
要将 cron 设置为每两分钟执行一次,可以这样编辑 crontab:
-
打开
crontab编辑器:crontab -e -
添加以下行来每两分钟执行一次脚本:
*/2 * * * * /path/to/your/script.sh
确保替换 /path/to/your/script.sh 为你的实际脚本路 径。保存并退出编辑器即可生效。
cron 时间配置规则
cron 时间配置规则由五个字段组成,格式如下:
* * * * * command_to_execute
- - - - -
| | | | |
| | | | +----- 星期几 (0 - 7) (周日为0或7)
| | | +------- 月份 (1 - 12)
| | +--------- 一个月中的哪一天 (1 - 31)
| +----------- 小时 (0 - 23)
+------------- 分钟 (0 - 59)
每个字段可以是一个数字、范围(如 1-5)、列表(如 1,2,3),或者步进值(如 */2 表示每隔两个单位)。
示例:
* * * * *:每分钟执行一次0 * * * *:每小时的第 0 分钟执行一次0 */2 * * *:每两小时的第 0 分钟执行一次0 0 * * *:每天午夜执行一次
可以根据需要调整这些字段来设置不同的执行频率。
自动提交 git
#!/bin/bash
echo "$(date '+%Y-%m-%d %H:%M:%S') - git_auto_commit.sh脚本开始执行" >> /Users/haotian.chen/logs/git_auto_commit.log
CODE_DIR="$HOME/mycode/github"
COMMIT_MESSAGE="Auto commit: $(date '+%Y-%m-%d %H:%M:%S')"
echo "📦 开始检查代码仓库提交状态..."
echo "──────────────────────────────"
# 遍历所有一级子目录
for dir in "$CODE_DIR"/*/; do
# 去除末尾斜杠获取目录名
clean_dir="${dir%/}"
project_name=$(basename "$clean_dir")
# 跳过非Git仓库
if [ ! -d "$clean_dir/.git" ]; then
echo "⏭️ 跳过非Git仓库: $project_name"
echo "──────────────────────────────"
continue
fi
echo "🔍 检查项目: $project_name"
cd "$clean_dir" || { echo "❌ 进入目录失败"; continue; }
# 检查更新
git fetch --quiet
# 检查工作树状态
if [ -n "$(git status --porcelain)" ] || [ "$(git rev-parse HEAD)" != "$(git rev-parse @{u})" ]; then
echo "⚠️ 发现未提交更改或远程更新:"
git status --short
# 暂存所有变更
git add .
# 提交变更
if git commit -m "$COMMIT_MESSAGE" --quiet; then
echo "✅ 提交成功: $COMMIT_MESSAGE"
# 尝试推送
if git push --quiet; then
echo "🚀 推送成功!"
# 添加延迟
# sleep 10
else
echo "❌ 推送失败!"
fi
else
echo "🟡 无新内容需要提交"
fi
else
echo "✅ 项目已是最新状态"
fi
echo "──────────────────────────────"
cd - > /dev/null || exit
done
echo "🎉 所有项目检查完成!"
日志
➜ ~ $ cat /Users/haotian.chen/logs/git_auto_commit.log
2025-02-19 11:58:23 - 脚本开始执行
2025-02-19 11:58:41 - 脚本开始执行
2025-02-19 11:58:48 - 脚本开始执行
2025-02-19 11:59:56 - 脚本开始执行
2025-02-19 12:08:01 - 脚本开始执行
2025-02-19 12:10:00 - 脚本开始执行
2025-02-19 12:12:00 - 脚本开始执行
2025-02-19 12:13:35 - git_auto_commit.sh脚本开始执行
2025-02-19 12:14:34 - git_auto_commit.sh脚本开始执行
2025-02-19 12:19:05 - git_auto_commit.sh脚本开始执行
2025-02-19 12:19:47 - git_auto_commit.sh脚本开始执行
2025-02-19 14:00:00 - git_auto_commit.sh脚本开始执行
2025-02-19 16:00:00 - git_auto_commit.sh脚本开始执行
2025-02-19 17:40:00 - git_auto_commit.sh脚本开始执行
2025-02-19 18:00:00 - git_auto_commit.sh脚本开始执行
2025-02-20 10:00:00 - git_auto_commit.sh脚本开始执行
2025-02-20 12:00:00 - git_auto_commit.sh脚本开始执行
2025-02-20 14:00:00 - git_auto_commit.sh脚本开始执行
2025-02-20 16:00:00 - git_auto_commit.sh脚本开始执行
2025-02-20 18:06:21 - git_auto_commit.sh脚本开始执行
2025-02-20 18:18:52 - git_auto_commit.sh脚本开始执行
2025-02-20 22:00:08 - git_auto_commit.sh脚本开始执行
2025-02-21 02:00:00 - git_auto_commit.sh脚本开始执行
2025-02-21 12:00:00 - git_auto_commit.sh脚本开始执行
2025-02-21 14:03:18 - git_auto_commit.sh脚本开始执行
2025-02-21 16:00:00 - git_auto_commit.sh脚本开始执行
2025-02-21 18:00:01 - git_auto_commit.sh脚本开始执行
缺陷
休眠的时候不会运行,但是从休眠中恢复后会执行
哈哈
以后就算丢也只能丢两小时内的东西