
Cron
Configure, inspect, and troubleshoot Linux cron jobs for backups, jobs, and scheduled maintenance on servers you operate.
Overview
Cron is an agent skill most often used in Operate (also Ship) that teaches crontab syntax, management commands, and system cron layouts for scheduled server tasks.
Install
npx skills add https://github.com/chaterm/terminal-skills --skill cronWhat is this skill?
- Crontab edit, list, and per-user management commands
- Five-field schedule syntax with comma, range, and step examples
- @reboot, @daily, @hourly and other special time strings
- User spool paths for Debian/Ubuntu vs CentOS/RHEL
- /etc/crontab and /etc/cron.d system-level job patterns
- Five-field cron time format (minute hour day month weekday)
- Seven special time strings including @reboot and @hourly
Adoption & trust: 1.2k installs on skills.sh; 44 GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
You need reliable scheduled jobs on a Linux box but keep confusing crontab syntax, spool paths, or system versus user crontabs.
Who is it for?
Solo builders SSHing into one or a few Linux servers who maintain their own cron without a managed platform scheduler.
Skip if: Teams that only use cloud cron (EventBridge, Cloud Scheduler) with no shell crontab, or Windows Task Scheduler-only workflows.
When should I use this skill?
User asks to create, edit, list, or debug cron or crontab on Linux servers.
What do I get? / Deliverables
Your agent proposes correct crontab entries, edit/list commands, and distro-appropriate paths so scheduled backups and scripts run on time.
- Valid crontab lines and management commands
- Correct spool or cron.d file references for the distro
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Operate/infra is the canonical shelf because crontab management is ongoing production hygiene, even though the same knowledge applies when you first schedule deploy hooks. Infra covers scheduled system tasks, log paths, and cron.d layouts—not application feature code in Build.
Where it fits
Restore a nightly backup cron after migrating from CentOS paths to Ubuntu spool locations.
Add a post-deploy health-check cron entry before marking a VPS release done.
Schedule a weekly log aggregation script without paying for a separate job runner.
How it compares
In-server crontab reference skill—not Kubernetes CronJob manifests or SaaS workflow builders.
Common Questions / FAQ
Who is cron for?
Indie developers and operators who manage Linux servers and want agent help for crontab syntax, locations, and troubleshooting.
When should I use cron?
In Operate/infra when fixing or adding scheduled tasks; in Ship/launch when first scheduling deploy or backup jobs; in Grow when automating periodic reports if they run on your VPS.
Is cron safe to install?
The skill describes shell scheduling—review the Security Audits panel on this page and restrict agent shell access on production; bad cron lines can wipe data or leak MAILTO output.
SKILL.md
READMESKILL.md - Cron
# 定时任务管理 ## 概述 Cron 定时任务配置、日志监控、故障排查等技能。 ## Crontab 基础 ### 管理命令 ```bash # 编辑当前用户的 crontab crontab -e # 查看当前用户的 crontab crontab -l # 删除当前用户的 crontab crontab -r # 管理其他用户的 crontab(需要 root) crontab -u username -e crontab -u username -l ``` ### 时间格式 ``` ┌───────────── 分钟 (0-59) │ ┌───────────── 小时 (0-23) │ │ ┌───────────── 日 (1-31) │ │ │ ┌───────────── 月 (1-12) │ │ │ │ ┌───────────── 星期 (0-7, 0和7都是周日) │ │ │ │ │ * * * * * command ``` ### 特殊字符 ```bash * # 任意值 , # 列表 (1,3,5) - # 范围 (1-5) / # 步长 (*/5 每5分钟) # 示例 0 * * * * # 每小时整点 */15 * * * * # 每15分钟 0 9-17 * * * # 9点到17点每小时 0 0 * * 1-5 # 工作日零点 0 0 1,15 * * # 每月1号和15号零点 ``` ### 特殊时间字符串 ```bash @reboot # 系统启动时 @yearly # 每年 (0 0 1 1 *) @monthly # 每月 (0 0 1 * *) @weekly # 每周 (0 0 * * 0) @daily # 每天 (0 0 * * *) @hourly # 每小时 (0 * * * *) ``` ## 配置文件 ### 用户 crontab ```bash # 位置 /var/spool/cron/crontabs/username # Debian/Ubuntu /var/spool/cron/username # CentOS/RHEL # 格式 SHELL=/bin/bash PATH=/usr/local/bin:/usr/bin:/bin MAILTO=admin@example.com # 任务 0 2 * * * /usr/local/bin/backup.sh ``` ### 系统 crontab ```bash # /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # 格式:多了用户字段 # 分 时 日 月 周 用户 命令 0 2 * * * root /usr/local/bin/backup.sh ``` ### cron.d 目录 ```bash # /etc/cron.d/myapp SHELL=/bin/bash PATH=/usr/local/bin:/usr/bin:/bin 0 * * * * appuser /opt/myapp/hourly-task.sh 0 2 * * * root /opt/myapp/daily-backup.sh ``` ### 预定义目录 ```bash /etc/cron.hourly/ # 每小时执行 /etc/cron.daily/ # 每天执行 /etc/cron.weekly/ # 每周执行 /etc/cron.monthly/ # 每月执行 # 放入可执行脚本即可 chmod +x /etc/cron.daily/myscript ``` ## 最佳实践 ### 脚本模板 ```bash #!/bin/bash # /usr/local/bin/cron-task.sh # 日志文件 LOG_FILE="/var/log/cron-task.log" # 锁文件(防止重复执行) LOCK_FILE="/var/run/cron-task.lock" # 检查锁 if [ -f "$LOCK_FILE" ]; then echo "$(date): Task already running" >> "$LOG_FILE" exit 1 fi # 创建锁 trap "rm -f $LOCK_FILE" EXIT touch "$LOCK_FILE" # 记录开始 echo "$(date): Task started" >> "$LOG_FILE" # 执行任务 /path/to/actual/command >> "$LOG_FILE" 2>&1 EXIT_CODE=$? # 记录结束 echo "$(date): Task finished with exit code $EXIT_CODE" >> "$LOG_FILE" exit $EXIT_CODE ``` ### Crontab 条目 ```bash # 推荐写法 # 1. 使用绝对路径 # 2. 重定向输出 # 3. 添加注释 # 每日备份 - 凌晨2点 0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1 # 每5分钟健康检查 */5 * * * * /usr/local/bin/healthcheck.sh > /dev/null 2>&1 # 每周日志清理 - 周日凌晨3点 0 3 * * 0 /usr/local/bin/cleanup-logs.sh >> /var/log/cleanup.log 2>&1 ``` ### 环境变量 ```bash # 在 crontab 中设置 SHELL=/bin/bash PATH=/usr/local/bin:/usr/bin:/bin HOME=/home/user MAILTO=admin@example.com # 或在脚本中加载 #!/bin/bash source /etc/profile source ~/.bashrc ``` ## 日志与监控 ### 查看日志 ```bash # 系统日志 grep CRON /var/log/syslog # Debian/Ubuntu grep CRON /var/log/cron # CentOS/RHEL # 实时监控 tail -f /var/log/syslog | grep CRON # 查看邮件(如果配置了 MAILTO) cat /var/mail/username ``` ### 调试技巧 ```bash # 手动测试脚本 /usr/local/bin/myscript.sh # 模拟 cron 环境 env -i /bin/bash --noprofile --norc -c '/usr/local/bin/myscript.sh' # 检查 cron 服务状态 systemctl status cron # Debian/Ubuntu systemctl status crond # CentOS/RHEL ``` ## 常见场景 ### 场景 1:数据库备份 ```bash # 每天凌晨2点备份 MySQL 0 2 * * * /usr/bin/mysqldump -u root -p'password' database | gzip > /backup/db_$(date +\%Y\%m\%d).sql.gz # 注意:% 需要转义为 \% ``` ### 场景 2:日志轮转 ```bash # 每天压缩并清理7天前的日志 0 0 * * * find /var/log/myapp -name "*.log" -mtime +7 -delete 0 1 * * * gzip /var/log/myapp/*.log.1 ``` ### 场景 3:监控告警 ```bash # 每5分钟检查服务状态 */5 * * * * /usr/local/bin/check-service.sh || /usr/local/bin/send-alert.sh ``` ### 场景 4:使用 flock 防止重复 ```bash # 使用 flock 确保单实例运行 */5 * * * * /usr/bin/flock -n /var/lock/mytask.lock /usr/local/bin/mytask.sh ``` ## 故障排查 | 问题 | 排查方法 | |------|----------| | 任务不执行 | 检查 cron 服务状态、日