๐ง Linux Crontab ่็ณป็ตฑๆ็จๅฎๆดๆๅญธ:cron / systemd-timer ๅฏฆๅๆๅ
Linux ็ๆ็จ็ณป็ตฑๆฏๆๆไผบๆๅจ็ฎก็、ๅไปฝ、่ชๅๅๆต็จ็้่ฆๅบ็ค。 ๆฌ็ฏๅฐๅฎๆดไป็ดน crontab、cron daemon、systemd timer,ไธฆๆไพๅฏฆๅ็ฏไพ, ๅๅฉไฝ ่ฆๅๅพๆฏๆฅๅไปฝ、ๆๅๅฅๅบทๆชขๆฅ,ๅฐ่ชๅๆธ ็ log ็ญๅ็จฎไปปๅ。
๐ ไธ、Cron ่ Crontab ๆฆๅฟต็ธฝ่ฆฝ
Cron ๆฏ Linux ๅ งๅปบ็ๆ็จ็ณป็ตฑ,่ฒ ่ฒฌๅฎๆๅท่กไปปๅ;่ Crontab ๅๆฏไฝฟ็จ่ ๅฏ็ทจ่ผฏ็ๆ็จ่กจ。
cron:ๅธธ้งๆๅ,่ฒ ่ฒฌ่ฎๅๆ็จ。crontab:ๆ็จ่จญๅฎๆๅจ。- ไฝ็ฝฎๅ
ๅซ:
/etc/crontab/etc/cron.d/、/etc/cron.hourly/็ญcrontab -e(ไฝฟ็จ่ ๆ็จ)
๐ ไบ、Crontab ๆ ผๅผ่ชชๆ(5 ๆฌ่ 6 ๆฌ)
ๆจๆบ Crontab ไฝฟ็จ 5 ๆฌๆ ผๅผ:
# ๅ ๆ ๆฅ ๆ ๆๆ
* * * * * ๆไปค
| ๆฌไฝ | ็ฏไพ | ่ชชๆ |
|---|---|---|
| ๅ | 0–59 | ็ฌฌๅนพๅ้ๅท่ก |
| ๆ | 0–23 | 24 ๅฐๆๅถ |
| ๆฅ | 1–31 | ไธๅๆไธญ็็ฌฌๅนพๅคฉ |
| ๆ | 1–12 | ๆไปฝ |
| ๆๆ | 0–7 | 0/7=ๆๆๆฅ |
✔ ๅธธ็จ็ฌฆ่
* ไปฃ่กจๆๆๅฏ่ฝๅผ
, ๅคๅๅผ,ไพๅฆ 1,3,5
- ็ฏๅ,ๅฆ 1-5
/ ๆฏ้,ไพๅฆ */10 = ๆฏ 10 ๅ้
๐ ไธ、Crontab ๅฏฆๅ็ฏไพ
1️⃣ ๆฏๅคฉ 02:00 ่ชๅๅไปฝ่ณๆ
0 2 * * * /usr/local/bin/backup.sh
2️⃣ ๆฏ 10 ๅ้ๅท่กๅฅๅบทๆชขๆฅ
*/10 * * * * /usr/bin/systemctl is-active nginx >> /var/log/nginx_health.log
3️⃣ ๆฏ้ฑไธๅๆจๆธ ้ค 7 ๅคฉๅ็ๆฅ่ช
0 3 * * 1 find /var/log -type f -mtime +7 -delete
๐ ๆฅ็ Cron ๅท่ก็ตๆ
journalctl -u cron
# ๆ
grep CRON /var/log/syslog
๐งฉ ๅ、Systemd Timer:ๆด็พไปฃ、ๆด็ฉฉๅฎ็ๆ็จๆนๅผ
ๅจ modern Linux (CentOS 7+、RHEL、Ubuntu 18.04+) ไธญ,ๆดๅปบ่ญฐไฝฟ็จ systemd timer, ๅ ็บๅฎๅ ทๅๆดๅฎๅ็ Log、ไพ่ณดๆง、ๅๅๆงๅถ่่งธ็ผๆจกๅ。
๐ฅ ไบ、ๅปบ็ซ Systemd Service + Timer(ๅฎๆด็ฏไพ)
1️⃣ ๅปบ็ซ Service
# /etc/systemd/system/cleanup.service
[Unit]
Description=Cleanup old logs
[Service]
Type=oneshot
ExecStart=/usr/local/bin/cleanup.sh
2️⃣ ๅปบ็ซ Timer
# /etc/systemd/system/cleanup.timer
[Unit]
Description=Run cleanup job daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
3️⃣ ๅ็จๆ็จ
systemctl daemon-reload
systemctl enable --now cleanup.timer
systemctl status cleanup.timer
๐ ๆฅ็ๅท่ก็ด้(ๆฏ cron ๆดๅฎๆด)
journalctl -u cleanup.service
systemctl list-timers
⚖️ ๅ ญ、Cron vs Systemd Timer ๆฏ่ผ
| ้ ็ฎ | Cron | Systemd Timer |
|---|---|---|
| Log | ้ๆฅ syslog | journalctl ๆฏๆดๅฎๅ |
| ็ฉฉๅฎๅบฆ | ๅบๆฌ | ๅผท,ๅฏ่จญๅฎไพ่ณด、้ๅ็ญ็ฅ |
| ่ค้ไปปๅ | ่ผ้ฃ็ฎก็ | ้ฉๅๅคงๅไปปๅ |
| ็ณป็ตฑๆดๅ | ไฝ | ้ซ(ๅฎๅ จ systemd ๆดๅ) |
ๅปบ่ญฐ:ๆฐ็ณป็ตฑๅชๅ ็จ systemd timer。
๐ง ไธ、ๅธธ่ฆๆๆฅๅ้ก
1️⃣ Cron ๆฒๆๅท่ก?
systemctl status cron
crontab -l
grep CRON /var/log/syslog
2️⃣ ๆไปคไธ่ฝๅท่ก?ๅคๅๆฏ PATH ๅ้ก
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
# ๅปบ่ญฐๅฏซๅจ crontab ๆไปถ้้ ญ
3️⃣ systemd timer ๆช่งธ็ผ?
systemctl status yourjob.timer
systemctl list-timers
journalctl -u yourjob.service
๐ ็ต่ช
ไธ่ซๆฏ Cron ้ๆฏ Systemd Timer ้ฝๆฏ Linux ่ชๅๅ็ๆ ธๅฟ่ฝๅ。 Cron ้ฉๅ็ฐกๅฎ、ๅฟซ้็ไปปๅ;Systemd Timer ๅ้ฉๅๆด็พไปฃ、ๅฏๆง、ๅฏ่งๅฏ็ๅคงๅๆ็จ。 ๅปบ่ญฐๅจๆฐ็ฐๅขๅ จ้ขๅฐๅ ฅ systemd timer,ไปฅๆๅๅฏ็ถญ่ญทๆง่็ฉฉๅฎๅบฆ。
๐ ๅปถไผธ้ฑ่ฎ
- Linux systemd ๆทฑๅ ฅ่งฃๆ
- Linux Logrotate ้ฒ้ๆๅญธ
- Linux ไฝฟ็จ่ ่ๆฌ้็ฎก็
- Linux ๅฎ่ฃๅฐ่ณๅฎๅผทๅๅฎๆดๆๅ
— WWFandy・็ณป็ตฑ่ชๅๅ็ญ่จ
ๆฒๆ็่จ:
ๅผต่ฒผ็่จ