Hur man använder Systemd-timrar som en ersättning för Cron
![](https://cdn.teknisiatemppuja.com/wp-content/uploads/linux-9.jpg)
Upptäck fördelarna med Systemd-timrar över traditionella cron-jobb. Lär dig att ställa in, hantera och optimera dina schemalagda uppgifter enkelt och effektivt.
Som Linux-användare är du förmodligen bekant med cron. Det har länge varit det självklara verktyget för tidsbaserad jobbplanering i Unix. Nu byter många användare till Systemd-timrar för att ersätta crons dominans. Den här artikeln kommer att diskutera grunderna för hur du ställer in din egen systemd-timer och säkerställer att den fungerar som den ska på ditt system.
Varför använda Systemd-timrar istället för Cron?
Ett av de största försäljningsargumenten för Systemd-timrar är att de är fullt integrerade i Systemd-ekosystemet. Det betyder att det är mycket enkelt att schemalägga och koppla olika Systemd-tjänsteenheter tillsammans, vilket gör det enklare att automatisera uppgifter jämfört med en traditionell cron-daemon.
En annan fördel med Systemd-timrar över Cron är att de ger mer detaljerad kontroll över hur du triggar dina schemalagda jobb. Till exempel har Systemd-timrar en OnBootSec
-variabel som gör att du kan fördröja din tjänsteenhet tills en viss tid passerar efter en lyckad start.
Slutligen är Systemd-timrar också otroligt exakta jämfört med en standard cron-daemon. Som standard kan de spåra och köra jobb med precision upp till en mikrosekund med hjälp av sin AccuracySec
-variabel. Detta är oerhört hjälpsamt om du kör en dator som kräver exakta tider för sina schemalagda uppgifter.
Bra att veta: letar du fortfarande efter rätt uppgiftsplaneringsdaemon? Kolla in vår lista med de bästa alternativen till cron som du kan installera idag.
Installera Systemd-timrar
Timmarna är en inbyggd funktion i Systemd. Det betyder att om du använder Systemd som din init-daemon, som är fallet med populära Linux-distroer som Arch, Fedora och Ubuntu, så drar din maskin redan nytta av denna funktion på vissa av sina systemprocesser.
För att kontrollera om din distro kör Systemd kan du köra följande kommando:
systemctl
Genom att göra detta listar du alla Systemd-enheter, enheter och timrar som för närvarande körs på ditt system.
Lista existerande timrar
Det enklaste sättet att kontrollera om en timer körs på ditt nuvarande användarkonto är med följande kommando:
systemctl list-timers
Du kan också använda flaggan --all
för att kontrollera varje enskild timer i systemet, inklusive de inaktiva:
systemctl list-timers --all
Genom att göra detta skrivs datum och tid då varje timer kommer att aktiveras ut, nerupptid till den punkten, hur mycket tid som har passerat sedan den senast kördes, enhetsnamnet för timern själv och tjänsten som varje timerenhet aktiverar.
Bra att veta: lär dig hur du enkelt hanterar och kontrollerar flera Systemd-enheter med hjälp av chkservice.
Skapa en ny tjänst och timer
Det första steget för att skapa en Systemd-timer är att antingen skapa eller hitta en befintlig tjänst att koppla den till. Detta beror på att varje timer måste kopplas till en föräldratjänsteenhet. Den här sektionen kommer att vägleda dig genom processen att skapa en timer för en anpassad Systemd-tjänst.
Börja med att skapa de tomma ".service"- och ".timer"-filerna i din hemkatalog:
touch ~/my-new-timer.{service,timer}
Öppna din nya tjänstefil med din favorittextredigerare:
nano ~/my-new-timer.service
Klistra in följande mall i din nya tjänstefil:
[Unit] Name=My New Service Description=Enhetsfilen för mitt anpassade kommando. [Service] Type=oneshot User=ramces WorkingDirectory=/home/ramces/ ExecStart=/home/ramces/.local/bin/my-script.sh [Install] WantedBy=multi-user.target
Spara din “.service”-fil och öppna sedan din tomma “.timer”-fil med samma textredigerare:
nano ~/my-new-timer.timer
Klistra in följande kodblock i din timerfil:
[Unit] Name=My New Service Description=Timern för mitt anpassade kommando. [Timer] Unit=my-new-timer.service OnCalendar=*-*-* 11:43:00 Persistent=true [Install] WantedBy=timers.target
Gå till [Timer]
-sektionen och ersätt värdet för OnCalendar
-variabeln med det datum och den tid som du vill att din Systemd-enhet ska köras. I mitt fall vill jag att mitt program ska köras exakt 11:43 varje dag.
Observera: De tre asteriskerna före värdet “11:43:00” står för År, Månad och Dag. Till exempel, om du ställer detta värde till “09-15-24” kommer Systemd att köra din tjänst en gång den 15 september 2024.
Skapa en monoton timer
Förutom att ställa in en timer som körs vid en specifik.
Det är också möjligt att skapa en monoton timer som körs i förhållande till din dators aktuella driftstid. Detta är användbart om du schemalägger en uppgift på en maskin som inte är konstant på, exempelvis en stationär dator eller en bärbar dator.
För att börja, öppna din ".timer"-fil och scrolla ner till [Timer]
-sektionen.
Ta bort både OnCalendar
och Persistent
variablerna, och lägg sedan till OnBootSec
följt av ett tidsintervall för när du vill att din enhetsfil ska köras. Till exempel, om du ställer in det på "1hr", kommer Systemd att starta ditt kommando en timme efter att din dator har startat upp.
Lägg till variabeln OnUnitActiveSec
precis under OnBootSec
, och ange intervallet som du vill att din timer ska köras kontinuerligt efter att ditt system har startat. I mitt fall kommer jag att ställa in det på "30min" eftersom jag vill att min uppgift ska köras var 30:e minut efter sin första körning.
Skapa en Övergående Timer
En av fördelarna med Systemd Timer, som är djupt integrerad i Systemd, är att den kan utnyttja init-daemonens andra angränsande program. Till exempel, det är möjligt att använda timrar med Systemd-run för att skapa engångsövergående jobb på din maskin.
För att skapa en enkel tillfällig timer, klistra in följande kodrad i en terminalsession, och ersätt värdet på --on-calendar
variabeln med det intervall som du vill att ditt kommando ska köras:
sudo systemd-run --on-calendar="*-*-* 11:46:00"
Lägg till det kommando som du vill köra i slutet av raden, och tryck Enter för att schemalägga det.
sudo systemd-run --on-calendar="*-*-* 11:46:00" /home/ramces/.local/my-script.sh
Du kan också skapa tillfälliga monotoniska timrar med både --on-boot
och --on-unit-active
variablerna:
sudo systemd-run --on-boot="1hr" --on-unit-active="30m" /home/ramces/.local/my-script.sh
Bekräfta att din tillfälliga timer nu är i kö på Systemds jobbschemaläggare genom att köra följande kommando:
sudo systemctl status run*.timer
Som en sidokommentar: Systemd-run är mer än bara ett sätt att skapa temporära timrar i Linux. Lär dig hur du kan använda det som ett sudo-alternativ med Run0.
Köra Systemd Timer
För att köra din nya Systemd Timer, behöver du försäkra dig om att den är korrekt laddad i din aktuella Systemd-session. För det, kopiera både din anpassade tjänst- och timerfil till Systemds tjänstkatalog:
sudo cp /home/ramces/my-new-timer.{service,timer} /etc/systemd/system/
Ladda om init-daemonens aktuella konfiguration:
sudo systemctl daemon-reload
Aktivera både den tjänst och timer som du har skapat med systemctl
:
sudo systemctl enable my-new-timer.service<br>sudo systemctl enable --now my-new-timer.timer
Kontrollera om du har laddat din nya timer korrekt genom att köra: sudo systemctl status my-new-timer.timer
i en ny terminalsession. I så fall kan du se att min timer nu är schemalagd och redo för systemet att köra.
Att lära sig hur man schemalägger uppgifter med Systemd Timers är bara en del av att förstå hur din Linux-maskin fungerar under huven. Dyk djupare i internals av detta underbara OS genom att titta på vår jämförelseartikel om Grub och Systemd-boot.
Lukijoidemme usein kysytyt kysymykset
Kan systemd ersätta cron?
Kyllä, systemd voi korvata cronin useissa tapauksissa.
- -
Timers
- : systemd:ssä on erityiset yksikkötiedostot, joiden nimet päättyvät .timer. Ne voivat ohjata palveluyksikkötiedostoja tai tapahtumia.
- Aikataulutus: Timereita voidaan käyttää säännöllisten tehtävien ajastamiseen, juuri kuten cronissa.
- Edut:
- Parempi hallinta ja näkyvyys prosessien tilasta.
- Complex event handling, kuten riippuvuudet ja muutokset tilanteissa.
- Yksinkertaisempi konfigurointi ja jäljitettävyys lokitietojen ansiosta. Yhteenvetona, systemd:n timereilla on potentiaalia korvata cron, erityisesti kehittyneissä ympäristöissä.
Ska jag använda cron eller systemd?
Här är några riktlinjer: Valj Cron Jobs om:
- - Du behöver enkel tidsbaserad schemaläggning.
- Du är redan bekant med Cron.
- Uppgifterna är grundläggande, till exempel dagliga säkerhetskopieringar eller loggrotationer. Valj SystemD Timers om:
- Du behöver mer avancerad schemaläggning.
- Du vill ha händelsebaserad triggning.
- Du har behov av beroendehantering mellan uppgifter. Valet beror på dina specifika behov och krav.
Hur fungerar systemd timers?
Systemd-timerit toimivat kahdella eri tavalla:
- -
Reaaliaika
- : Nämä ajastimet perustuvat kalenteritapahtumiin. Ne laukaisevat toimintoja tiettynä ajankohtana tai toistuvasti määritellyin välein.
- Monotoninen: Nämä ajastimet perustuvat tapahtumiin, kuten järjestelmän käynnistykseen tai prosessin tilan muutokseen. Systemd tukee myös tilapäisiä ajastimia, jotka ovat voimassa vain nykyisessä istunnossa. Tyypillisesti ajastimet ovat pysyviä ja niiden toiminta tallennetaan, mutta tilapäiset ajastimet voidaan määrittää loppumaan istunnon päättyessä.
Vad är randomizeddelaysec?
RandomizedDelaySec on asetustekijä, joka määrittää, kuinka pitkään ajastinta viivästetään satunnaisesti valitun ajan mukaan. Tämän ajan valinta on tasaisesti jakautunut 0 ja määritellyn arvon välille. Oletusarvo on 0, mikä tarkoittaa, ettei satunnaista viivästystä sovelleta. Käyttötarkoituksia:
- - Vähentää automaattista kuormitusta.
- Parantaa verkon suorituskykyä.
- Estää vaaralliset kuormitushuiput. Satunnaiset viivästykset voivat auttaa tasapainottamaan palvelinkäyttöä ja optimoimaan prosesseja.
Nyt kun olet lukenut Hur man använder Systemd-timrar som en ersättning för Cron loppuun, kutsumme sinut tutustumaan lisää Linux-kategoriaan. Löydät sieltä muita mielenkiintoisia artikkeleita, jotka laajentavat tietojasi ja pitävät sinut ajan tasalla. Älä lopeta lukemista ja löytämistä!
Vastaa