Cron 简介
Cron 是 Linux/Unix 系统中的任务调度器,用于在预定时间自动执行命令或脚本,OpenClaw 项目可以通过 Cron 实现自动化任务。

检查 Cron 服务状态
# 检查 cron 是否安装 crontab -l # 检查 cron 服务状态 (系统不同命令可能不同) sudo systemctl status cron # Ubuntu/Debian sudo systemctl status crond # CentOS/RHEL
编辑 Cron 任务
# 编辑当前用户的 cron 任务 crontab -e # 查看当前用户的 cron 任务 crontab -l # 删除当前用户的所有 cron 任务 crontab -r
Cron 时间格式
* * * * *
- - - - -
| | | | |
| | | | +----- 星期几 (0 - 7) (0和7都代表星期日)
| | | +---------- 月份 (1 - 12)
| | +--------------- 日期 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
OpenClaw 相关 Cron 示例
示例 1:每天凌晨 2 点执行 OpenClaw 爬虫
# 每天凌晨 2:00 运行 OpenClaw 主脚本 0 2 * * * /usr/bin/python3 /path/to/openclaw/main.py >> /path/to/openclaw/logs/cron.log 2>&1
示例 2:每小时执行一次数据同步任务
# 每小时的第 30 分钟执行数据同步 30 * * * * /usr/bin/python3 /path/to/openclaw/sync_data.py
示例 3:工作日每天上午 9 点和下午 5 点执行
# 周一到周五,上午 9:00 和下午 5:00 执行 0 9,17 * * 1-5 /usr/bin/python3 /path/to/openclaw/daily_tasks.py
示例 4:每 15 分钟检查一次服务状态
# 每 15 分钟执行一次监控脚本 */15 * * * * /usr/bin/python3 /path/to/openclaw/health_check.py
示例 5:每月第一天清理日志
# 每月 1 号凌晨 3:00 清理日志 0 3 1 * * /bin/bash /path/to/openclaw/scripts/cleanup_logs.sh
环境变量设置
为了确保 OpenClaw 在 Cron 中正常运行,建议在脚本中设置环境变量:
# 方法 1:在 crontab 文件顶部设置 SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin PYTHONPATH=/path/to/openclaw # 方法 2:在 wrapper 脚本中设置 #!/bin/bash export PATH=/usr/local/bin:$PATH export PYTHONPATH=/path/to/openclaw:$PYTHONPATH cd /path/to/openclaw python3 main.py
创建 Cron Wrapper 脚本
#!/bin/bash
# 文件名: run_openclaw.sh
# 路径: /path/to/openclaw/scripts/
# 设置环境
export PATH=/usr/local/bin:$PATH
export PYTHONPATH=/path/to/openclaw:$PYTHONPATH
# 切换到项目目录
cd /path/to/openclaw
# 激活虚拟环境(如果使用)
source venv/bin/activate
# 执行 Python 脚本
python3 main.py >> logs/$(date +\%Y\%m\%d).log 2>&1
# 发送通知(可选)
if [ $? -eq 0 ]; then
echo "OpenClaw executed successfully at $(date)" | mail -s "OpenClaw Success" admin@example.com
else
echo "OpenClaw failed at $(date)" | mail -s "OpenClaw Failed" admin@example.com
fi
# 给脚本执行权限 chmod +x /path/to/openclaw/scripts/run_openclaw.sh # Cron 配置 0 2 * * * /path/to/openclaw/scripts/run_openclaw.sh
调试 Cron 任务
检查日志
# 查看系统 cron 日志 sudo tail -f /var/log/syslog | grep cron # Ubuntu/Debian sudo tail -f /var/log/cron # CentOS/RHEL
测试命令
# 临时测试 Cron 命令 * * * * * /path/to/test_script.sh # 每分钟执行一次测试
重定向输出
# 将输出重定向到文件以便调试 0 2 * * * /path/to/script.sh > /tmp/cron_debug.log 2>&1
高级用法
随机延迟执行(避免任务集中)
# 在凌晨 2:00 到 2:30 之间随机执行 0 2 * * * sleep $((RANDOM \% 1800)) && /path/to/openclaw/main.py
错误重试机制
#!/bin/bash
# retry_script.sh
MAX_RETRIES=3
RETRY_COUNT=0
while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
python3 /path/to/openclaw/main.py
if [ $? -eq 0 ]; then
echo "Success at $(date)"
exit 0
fi
RETRY_COUNT=$((RETRY_COUNT+1))
echo "Retry $RETRY_COUNT failed, waiting 60 seconds..."
sleep 60
done
echo "All retries failed at $(date)"
exit 1
安全建议
-
最小权限原则:使用专用用户运行 OpenClaw
sudo useradd -r -s /bin/false openclaw_user sudo crontab -u openclaw_user -e
-
配置文件保护:
chmod 600 /path/to/openclaw/config.yaml
-
日志轮转:
# /etc/logrotate.d/openclaw /path/to/openclaw/logs/*.log { daily rotate 30 compress missingok notifempty }
常见问题解决
问题 1:Cron 任务不执行
- 检查服务状态:
sudo systemctl status cron - 检查路径:在脚本中使用绝对路径
- 检查权限:确保脚本有执行权限
问题 2:Python 模块找不到
- 在脚本中设置 PYTHONPATH
- 使用虚拟环境的绝对路径
问题 3:依赖服务未启动
# 在脚本开头检查依赖
#!/bin/bash
if ! pgrep -x "redis-server" > /dev/null; then
echo "Redis not running, starting..."
sudo systemctl start redis
fi
这个教程涵盖了 OpenClaw 项目使用 Cron 的基本到高级用法,根据实际需求调整时间计划和脚本路径。
标签: OpenClaw Cron 任务创建教程
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。