็†ฑ้–€ๅˆ†้กž
 ่ผ‰ๅ…ฅไธญ…
็›ฎ้Œ„

๐Ÿง Linux Crontab ่ˆ‡็ณป็ตฑๆŽ’็จ‹ๅฎŒๆ•ดๆ•™ๅญธ:cron / systemd-timer ๅฏฆๅ‹™ๆŒ‡ๅ—

    ๐Ÿง 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–2324 ๅฐๆ™‚ๅˆถ
    ๆ—ฅ1–31ไธ€ๅ€‹ๆœˆไธญ็š„็ฌฌๅนพๅคฉ
    ๆœˆ1–12ๆœˆไปฝ
    ๆ˜ŸๆœŸ0–70/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 ๆฏ”่ผƒ

    ้ …็›ฎCronSystemd Timer
    Log้œ€ๆŸฅ syslogjournalctl ๆ”ฏๆดๅฎŒๅ–„
    ็ฉฉๅฎšๅบฆๅŸบๆœฌๅผท,ๅฏ่จญๅฎšไพ่ณด、้‡ๅ•Ÿ็ญ–็•ฅ
    ่ค‡้›œไปปๅ‹™่ผƒ้›ฃ็ฎก็†้ฉๅˆๅคงๅž‹ไปปๅ‹™
    ็ณป็ตฑๆ•ดๅˆไฝŽ้ซ˜(ๅฎŒๅ…จ 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,ไปฅๆๅ‡ๅฏ็ถญ่ญทๆ€ง่ˆ‡็ฉฉๅฎšๅบฆ。


    ๐Ÿ”— ๅปถไผธ้–ฑ่ฎ€

    — WWFandy・็ณป็ตฑ่‡ชๅ‹•ๅŒ–็ญ†่จ˜

    ๐Ÿ”— ๅˆ†ไบซ้€™็ฏ‡ LINE Facebook X

    ๆฒ’ๆœ‰็•™่จ€:

    ๅผต่ฒผ็•™่จ€

    ๅญ—็ดš