cron
128
总安装量
23
周安装量
#3475
全站排名
安装命令
npx skills add https://github.com/chaterm/terminal-skills --skill cron
Agent 安装分布
openclaw
16
claude-code
11
gemini-cli
10
opencode
10
codex
10
antigravity
9
Skill 文档
宿¶ä»»å¡ç®¡ç
æ¦è¿°
Cron 宿¶ä»»å¡é ç½®ãæ¥å¿çæ§ãæ éææ¥çæè½ã
Crontab åºç¡
管çå½ä»¤
# ç¼è¾å½åç¨æ·ç 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
ç¹æ®å符
* # ä»»æå¼
, # å表 (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å·é¶ç¹
ç¹æ®æ¶é´å符串
@reboot # ç³»ç»å¯å¨æ¶
@yearly # æ¯å¹´ (0 0 1 1 *)
@monthly # æ¯æ (0 0 1 * *)
@weekly # æ¯å¨ (0 0 * * 0)
@daily # æ¯å¤© (0 0 * * *)
@hourly # æ¯å°æ¶ (0 * * * *)
é ç½®æä»¶
ç¨æ· crontab
# ä½ç½®
/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
# /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# æ ¼å¼ï¼å¤äºç¨æ·å段
# å æ¶ æ¥ æ å¨ ç¨æ· å½ä»¤
0 2 * * * root /usr/local/bin/backup.sh
cron.d ç®å½
# /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
é¢å®ä¹ç®å½
/etc/cron.hourly/ # æ¯å°æ¶æ§è¡
/etc/cron.daily/ # æ¯å¤©æ§è¡
/etc/cron.weekly/ # æ¯å¨æ§è¡
/etc/cron.monthly/ # æ¯ææ§è¡
# æ¾å
¥å¯æ§è¡èæ¬å³å¯
chmod +x /etc/cron.daily/myscript
æä½³å®è·µ
èæ¬æ¨¡æ¿
#!/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 æ¡ç®
# æ¨èåæ³
# 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
ç¯å¢åé
# å¨ 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
æ¥å¿ä¸çæ§
æ¥çæ¥å¿
# ç³»ç»æ¥å¿
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
è°è¯æå·§
# æå¨æµè¯èæ¬
/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ï¼æ°æ®åºå¤ä»½
# æ¯å¤©åæ¨2ç¹å¤ä»½ MySQL
0 2 * * * /usr/bin/mysqldump -u root -p'password' database | gzip > /backup/db_$(date +\%Y\%m\%d).sql.gz
# 注æï¼% éè¦è½¬ä¹ä¸º \%
åºæ¯ 2ï¼æ¥å¿è½®è½¬
# æ¯å¤©å缩并æ¸
ç7天åçæ¥å¿
0 0 * * * find /var/log/myapp -name "*.log" -mtime +7 -delete
0 1 * * * gzip /var/log/myapp/*.log.1
åºæ¯ 3ï¼çæ§åè¦
# æ¯5åéæ£æ¥æå¡ç¶æ
*/5 * * * * /usr/local/bin/check-service.sh || /usr/local/bin/send-alert.sh
åºæ¯ 4ï¼ä½¿ç¨ flock 鲿¢éå¤
# ä½¿ç¨ flock ç¡®ä¿åå®ä¾è¿è¡
*/5 * * * * /usr/bin/flock -n /var/lock/mytask.lock /usr/local/bin/mytask.sh
æ éææ¥
| é®é¢ | ææ¥æ¹æ³ |
|---|---|
| ä»»å¡ä¸æ§è¡ | æ£æ¥ cron æå¡ç¶æãæ¥å¿ |
| æéé误 | æ£æ¥èæ¬æéãç¨æ·æé |
| ç¯å¢åéé®é¢ | å¨èæ¬ä¸è®¾ç½® PATH |
| å½ä»¤æ¾ä¸å° | 使ç¨ç»å¯¹è·¯å¾ |
| è¾åºä¸¢å¤± | éå®åå°æ¥å¿æä»¶ |
# æ£æ¥ cron æå¡
systemctl status cron
# æ£æ¥ç¨æ·æ¯å¦è¢«ç¦æ¢
cat /etc/cron.allow
cat /etc/cron.deny
# æ£æ¥è¯æ³
crontab -l | grep -v '^#' | while read line; do
echo "Checking: $line"
done