Hvordan jeg bruger Linux-terminalen uden at røre ved den: Min hemmelighed til ekstrem automatisering

Automatisering af opgaver i Linux-terminalen kan effektivisere dit arbejde betydeligt. Lær at bruge cron og systemd til at planlægge og styre scripts nemt.
Linux-terminalen er en kraftfuld måde at køre programmer på din computer fra kommandolinjen. Ved hjælp af scripts kan du nemt gentage almindelige opgaver, selv med kompleks programmeringslogik.
Men det kan være besværligt at arbejde med automatisering, især hvis du ikke er fan af terminalen. Heldigvis tilbyder Linux et par praktiske løsninger til opgavestyring, uanset om du har brug for at planlægge gentagne programmer eller køre dem efter behov.
Hvad skal automatiseres og hvorfor
Hvis du skal gøre det mere end én gang, automatiser det
Først, hvad kunne du overveje at automatisere, og hvorfor?
En af de ting, jeg er dårlig til, er at tømme min Downloads-mappe; over tid vokser den, og så ender jeg med bare at slette alt manuelt:
rm -rf ~/Downloads/* Selvom dette fungerer OK, er det en irritation at skulle gøre det hver gang, så jeg kan godt lide at automatisere processen. Automatisering af en opgave har to hovedfordele: det sparer tid, og det giver dig større kontrol over opgaven. At køre et script fra terminalen er så simpelt som at skrive et filnavn eller en kommando og trykke Enter:
# kør en kommando fra din PATH clear-downloads # kør en kommando fra en fil ~/.local/bin/clear-downloads Dette er selvfølgelig meget lettere og hurtigere end at køre de specifikke kommandoer, som disse scripts eller programmer måtte indeholde. At bruge et script tillader mig også at tilføje relateret funktionalitet: Jeg kan registrere detaljer om, hvad der er blevet slettet i en log eller filtrere filerne baseret på størrelse eller alder, for eksempel.
Alt, hvad du kunne tænke dig at gøre mere end én gang, er en kandidat til automatisering. At holde en optegnelse over netværkstrafik, rapportere diskforbrug, opdatere software eller opdatere et RSS-feed er alle gode eksempler.
Hvordan automatiseres med cron
Den klassiske måde at planlægge opgaver på Linux
I et halvt århundrede har cron været den primære måde at planlægge opgaver, der skal køre på bestemte tidspunkter. Cron følger det klassiske Unix-princip, at almindelig tekst er overlegen, og enkle formater er de bedste:
Et crontab-dokument indeholder en liste over opgaver, der skal køres, hver i formatet:
m h d o w <kommando at køre> I dette format definerer m (minut), h (time), d (dag i måneden), o (måned) og w (uge dag), hvornår en opgave skal køres, så du kan indstille en opgave til at køre kl. 10:00 hver fredag med en linje som denne:
* 10 * * 5 /Users/bobby/.local/bin/clear-downloads Selvom cron har eksisteret i mange år, har den sine kritikere. Syntaxen er ikke altid nem at huske—eller endda forstå—og miljøet, som cron kører i, er ikke åbenlyst. Det kan være vanskeligt at fejlfinde, og opgaver er strengt bundet til klokkeslæt. Cron kan være det rigtige værktøj til enkle opgaver, men der findes et meget mere kraftfuldt og forbedret alternativ: systemd.
Hvordan automatiseres med systemd og hvorfor det er bedre
Giver alt, hvad cron gør, og så meget mere
Systemd-softwaren er en mere moderne tilgang til tjenestestyring, som gør det, cron gør, plus meget mere. Du kan stadig bruge det til at planlægge scripts, men systemd håndterer også systemprocesser, bootstyring, hændelseslogning og netværksopløsning.
En systemd-opgave kræver en smule mere indledende opsætning end en cron-post, men den er meget mere brugbar, når du har oprettet den. Som et enkelt eksempel, forestil dig, at du har et script på /home/bobby/scripts/clear-docs.sh:
#!/bin/sh # Fjern alt. Kan ændres til kun at fjerne et bestemt antal filer, # kun filer over en bestemt størrelse, filer ældre end en bestemt alder osv. rm --recursive --force --verbose ~/Documents/* For at installere dette som en planlagt systemd-opgave (kaldet en timer) skal du oprette en tilhørende fil på /etc/systemd/system/clear-docs.service:
[Unit] Description=Rydder op i Documents-mappen som en demo af systemd-timere Wants=clear-docs.timer [Service] User=bobby Group=bobby Type=oneshot ExecStart=/home/bobby/scripts/clear-docs.sh [Install] WantedBy=multi-user.target Bemærk, at formatet på denne fil meget ligner Windows .ini filformat, med overskrifter i parentes og navn/værdipar på hver linje.
Eksempel på, hvordan systemd går meget længere end cron. Det specificerer en afhængighed af en anden enhed, som du kan oprette i en separat fil på /etc/systemd/system/clear-docs.timer:
[Unit]
Description=Timer for: clear-docs.service
Requires=clear-docs.service
[Timer]
Unit=clear-docs.service
# Kør timeren, hver time, på timen
OnCalendar=*-*-* *:00:00
[Install]
WantedBy=timers.target Denne timerdefinition bruger OnCalendar-direktivet, som ligner det præfix, cron bruger til at planlægge hver kommando. Systemd-softwaren giver dog meget større fleksibilitet: du kan indstille automatiseringer til at reagere på relative tidspunkter som "ti minutter efter opstart" (OnBootSec=10min) eller endda begivenheder, der ikke er relateret til tid, som når en specifik fil ændres.
Når disse filer er oprettet, kan du nu fuldføre opsætningen ved at genstarte systemd og starte din nye tjeneste:
sudo systemctl daemon-reload
sudo systemctl enable clear-docs.timer
sudo systemctl start clear-docs.timer På dette tidspunkt kan du tjekke, at alt er oppe at køre ved at forespørge timeren:
systemctl status clear-docs.timer Bemærk, at de returnerede oplysninger inkluderer, hvornår timeren startede og hvornår den næste gang vil blive udløst.
Du kan også forespørge tjenesten, som giver detaljer om scriptfilen og korte logs:
Kontrol af systemd med en GUI
Brug en af disse apps til nem adgang til automatiseringer
Når det hårde arbejde er overstået, kan du kontrollere individuelle systemd-tjenester ved hjælp af en front-end-app som Systemd Manager.
Denne GTK-baserede app lader dig se tjenester, aktivere individuelle enheder og redigere automatiseringsfiler. Du kan også tjekke deres logs og analysere den tid, det tager at starte dit system.
Til daglig brug foretrækker jeg GNOME-udvidelsen med samme navn, som er et meget enklere alternativ. Den tilføjer en dropdown-menu til din toppanel, med individuelle tjenester, som du kan vælge at inkludere.
Ved at bruge denne udvidelse kan du starte, stoppe og genstarte en tjeneste med kun to klik. Den er altid tilgængelig, så du ikke behøver at nærme dig dit terminal for at køre automatiseringer, selv dem, der normalt er planlagt til bestemte tidspunkter. At køre et job efter behov kan hjælpe dig med at fejlfinde det, og systemd gør dette meget lettere end cron.
For uovertruffen fleksibilitet er systemd vejen
Ikke alle er fans af systemd, og jeg kan forstå hvorfor. For dem, der er vokset op med cron, præsenterer det en stejl lærekurve, og dets kompleksitet følger ikke altid Linux-principperne.
Dog kan man ikke benægte fordelen ved planlagte opgaver, der kører i et kontrolleret miljø, med avancerede funktioner som logging indbygget. Med understøttende GUI-apps, der tilbyder kontrol med ét klik og en terminalfri oplevelse, er systemd bestemt værd at investere tid i.

Skriv et svar