Seva hujilipia kwa kufanya kazi ukiwa umelala: backup, mzunguko wa kumbukumbu, kufanya upya vyeti, ripoti saa tatu asubuhi. Linux ina vipanga ratiba viwili kwa hili. Cron ina miaka arobaini na inahitaji mstari mmoja. Timer za systemd zinahitaji faili mbili ndogo, na kwa malipo zinatoa kumbukumbu, kufidia baada ya kuzimwa na muda kamili. Mwongozo huu unashughulikia vyote viwili kwenye Ubuntu 24.04, kila tabia ikiwa imekaguliwa kwenye seva mpya kutoka image yetu, pamoja na makosa matatu yanayofanya kazi ya cron ishindwe bila neno.
Unahitaji mtumiaji mwenye sudo; mwongozo wa kusanidi Ubuntu unamuunda.
1. Cron kwa dakika tano
Cron imesakinishwa na inaendeshwa kwenye image zetu za Ubuntu na Debian. Kila mtumiaji ana jedwali la kazi; hariri lako kwa:
crontab -e
Kila mstari ni sehemu tano za muda na amri:
# min hour day month weekday command
30 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
*/5 * * * * /usr/local/bin/check.sh
0 9 * * 1-5 /usr/local/bin/report.sh
@reboot /usr/local/bin/start-tunnel.sh
Yaani: saa 03:30 kila usiku, kila dakika 5, saa 09:00 siku za kazi, na mara moja baada ya kila kuwasha. */5 ni kila thamani ya tano, 1-5 ni masafa, 1,15 ni orodha. Saa za eneo za seva ndizo zinatumika, UTC kwenye image zetu; weka zako mara moja kwa mwongozo wa jina la mwenyeji na saa za eneo na cron itazifuata.
Kagua kilichoendeshwa kwa journalctl -u cron. Kila mzunguko huandika mtumiaji na amri, na hapo ndipo mitego mitatu inajitokeza.
Mtego 1: matokeo hupotea. Cron hutuma matokeo ya kazi kwa mtumiaji kwa barua pepe. Image yetu haina seva ya barua, kwa hiyo journal iliandika (CRON) info (No MTA installed, discarding output) na matokeo yalipotea. Yaelekeze mwenyewe, kama mfano wa kwanza unavyofanya kwa >> /var/log/backup.log 2>&1.
Mtego 2: alama ya asilimia. Kwenye crontab, % humaliza amri na kugeuza kinachobaki kuwa ingizo la kawaida. Tulipanga date +%F > /tmp/today. Journal inaonyesha kile cron ilichoendesha kweli: CMD (date +). Hakuna faili iliyoandikwa na hakuna hitilafu iliyotufikia. Andika \%, au weka amri kwenye skripti na upange skripti.
Mtego 3: mazingira tofauti. Cron huendesha kazi kwa /bin/sh, si bash, kwenye saraka yako ya home na kwa mazingira finyu. Kwenye Ubuntu 24.04 PATH ilikuwa bora kuliko sifa yake: njia kamili ya mfumo ikiwemo /usr/local/bin na /snap/bin, kwa root na kwa mtumiaji wa kawaida. Kinachokosekana bado ni kila kitu chini ya home yako: ~/.local/bin, node ya nvm, pipx, cargo. Tumia njia kamili kwenye kazi au anza mstari kwa . $HOME/.profile;.
Kazi za mfumo badala ya mtumiaji huwekwa kwenye /etc/cron.d/ kama faili yenye sehemu moja ya ziada, mtumiaji:
30 3 * * * root /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Ubuntu pia huendesha kila kitu kwenye /etc/cron.hourly, cron.daily, cron.weekly na cron.monthly, dakika ya 17 ya kila saa, saa 06:25, Jumapili saa 06:47 na tarehe 1 saa 06:52. Weka skripti inayotekelezeka hapo na itaendeshwa pamoja na nyingine.
2. Timer za systemd
Timer ni unit mbili: huduma inayofanya kazi na timer inayosema lini. Unda skripti kwanza, kisha unit.
sudo nano /usr/local/bin/backup.sh
sudo chmod +x /usr/local/bin/backup.sh
sudo nano /etc/systemd/system/backup.service
[Unit]
Description=Nightly backup
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
sudo nano /etc/systemd/system/backup.timer
[Unit]
Description=Run the backup every night at 03:30
[Timer]
OnCalendar=*-*-* 03:30
Persistent=true
AccuracySec=1m
[Install]
WantedBy=timers.target
Washa timer, si huduma:
sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
systemctl list-timers backup.timer
list-timers inaonyesha mzunguko unaofuata, muda uliobaki hadi huo na mzunguko wa mwisho. Kumbukumbu hazihitaji kusanidiwa: journalctl -u backup.service ina kila mwanzo, kila mwisho na kila mstari wa matokeo pamoja na muda. Ili kuendesha kazi sasa hivi, sudo systemctl start backup.service; hivyo pia ndivyo unavyojaribu skripti kabla ya kuamini ratiba.
Sintaksia ya kalenda. OnCalendar husomwa siku-ya-wiki mwaka-mwezi-siku saa:dakika:sekunde, * ikiwa thamani yoyote. Jaribu usemi kabla ya kuutumia:
systemd-analyze calendar "Mon..Fri *-*-* 03:00" --iterations 2
Huchapisha muundo uliosawazishwa na tarehe zinazofuata. Baadhi ya semi tulizokagua:
| OnCalendar | Maana |
|---|---|
*-*-* 03:30 | Kila siku saa 03:30 |
Mon..Fri *-*-* 09:00 | Siku za kazi saa 09:00 |
*:0/15 | Kila dakika 15 |
weekly | Jumatatu saa 00:00 |
*-*-01 04:00 | Tarehe 1 ya kila mwezi saa 04:00 |
*-*-* 03:00 Europe/Kyiv | 03:00 kwa saa za Kyiv; kwetu iliendeshwa saa 01:00 UTC |
Mipangilio mitatu inayofaa kujua. Persistent=true huhifadhi mzunguko wa mwisho kwenye diski na hufidia mzunguko uliokosekana seva ikiwa imezimwa au timer imesimamishwa. Tulisimamisha timer yetu ya kila dakika mbili, tukasubiri mzunguko uliopangwa upite, kisha tukaiwasha tena: mzunguko uliokosekana ulianza ndani ya sekunde ile ile. Bila Persistent, inasubiri tu nafasi inayofuata.
AccuracySec ndio mshangao. Kwa chaguomsingi systemd hukusanya timer ndani ya dirisha la dakika moja ili kuokoa kuamsha mfumo, kwa hiyo mzunguko wetu wa kwanza ulikuja saa 07:42:18, si 07:42:00. Kwa AccuracySec=1s mizunguko iliyofuata iliangukia sekunde kamili 07:46:00 na 07:48:00. Iweke dakika inapokuwa muhimu; acha chaguomsingi kwa backup ya usiku.
RandomizedDelaySec=10m hufanya kinyume kwa makusudi: husambaza mwanzo ndani ya dirisha ili seva kumi zisigonge hifadhi moja ya backup kwa sekunde ile ile.
Kwa kazi ya mara moja, hakuna faili linalohitajika:
sudo systemd-run --on-active=30m --unit=cleanup-once /usr/local/bin/cleanup.sh
Huunda timer ya muda inayoendeshwa mara moja kisha kutoweka; hadi wakati huo systemctl list-timers inaionyesha.
3. Ipi utumie
| Cron | Timer ya systemd | |
|---|---|---|
| Kusanidi | Mstari 1 | Faili 2 |
| Kumbukumbu | Ukielekeza matokeo tu | journalctl -u name.service |
| Mzunguko uliokosekana seva ikiwa imezimwa | Umepotea | Huendeshwa wakati wa kuwasha kwa Persistent=true |
| Kazi bado inaendelea kwenye mzunguko unaofuata | Nakala ya pili huanza | Inarukwa hadi ya kwanza imalize |
| Muda kamili | Hadi dakika | Hadi sekunde kwa AccuracySec=1s |
| Hali | Hakuna | list-timers, systemctl status |
Tumia cron kwa mstari wa haraka utakaoutambua hata baada ya mwaka. Tumia timer kwa chochote ambacho unahitaji kuona kikishindwa, kisichopaswa kupishana au kinachopaswa kuendeshwa baada ya kuwasha upya kulikokosekana: backup, kufanya upya vyeti, kusafisha hifadhidata. Ikiwa kazi ya cron inaweza kupishana, ifunge: flock -n /tmp/backup.lock /usr/local/bin/backup.sh, na nakala ya pili hutoka mara moja.
Vipanga ratiba vyote viwili huanzisha kazi kisha husimama. Kwa programu inayopaswa kuendeshwa saa zote na kurudi baada ya kuanguka, unahitaji huduma, si ratiba; angalia jinsi ya kuunda huduma ya systemd na kwa Windows jinsi ya kuendesha skripti 24/7 kwenye Windows Server. Timer nzuri ya kwanza ni ile kutoka mwongozo wetu wa backup kwa restic; masasisho ya usalama ya kiotomatiki ni timer ambayo Ubuntu tayari inaileta, apt-daily-upgrade.timer, moja ya 17 zinazoendeshwa kwenye seva mpya.
Maoni
Bado hakuna maoni. Kuwa wa kwanza.