Si të ekzekutoni një program Linux në fillimin me systemd
Keni nevojë për të nisur një program Linux në nisje? Softueri systemd ofron një mënyrë për ta bërë atë në çdo shpërndarje Linux me systemd - që është shumica e tyre këto ditë, duke përfshirë Ubuntu. Ne do t'ju përcjellim në procesin e krijimit të një shërbimi të integruar—dhe madje ai flet me ditarin.
Ky udhëzues tregon se si të konfiguroni një shërbim të sistemit që fillon kur filloni sistemin tuaj. Për të nisur një program grafik kur identifikoheni, përdorni menaxherin e fillimit të desktopit tuaj.
Ekzekutimi i programeve në fillim
Ndonjëherë softueri që instaloni në kompjuterin tuaj lidhet me procesin e nisjes së Linux-it, në mënyrë që programi të hapet automatikisht sa herë që kompjuteri niset. Ju mund ta arrini lehtësisht të njëjtën sjellje me programet dhe skriptet tuaja, ose në fakt çdo program tjetër që është në kompjuterin tuaj.
Programet që lansohen në fillim kontrollohen nga systemd
, menaxheri i sistemit dhe i shërbimit. systemd
është procesi i parë që ekzekutohet në fillim. Gjithmonë ka ID-në e procesit (PID) 1. Çdo proces tjetër që ekzekutohet në kompjuterin tuaj niset nga systemd
ose nga një proces që systemd
ka filluar tashmë.
Programet që funksionojnë në sfond quhen demonë ose shërbime. d në fund të systemd
qëndron për demon. Në këtë artikull, ne do të krijojmë një shërbim shembull. Për të shënuar të gjitha kutitë, shërbimi ynë duhet të jetë:
- I integruar me
systemd
përmes një skedari të njësisë së shërbimit - Lansuar në fillim
- E kontrollueshme duke përdorur
systemctl
, ndërfaqen e kontrollit përsystemd
- Në gjendje të shkruaj në ditar
Krijimi i Programit të Shërbimit
Duhet të kemi një program që do të nisë systemd
. Ne do të krijojmë një skenar të thjeshtë, të quajtur htg.sh. Ky tutorial përdor redaktuesin e tekstit Gedit, por ju mund të përdorni cilindo redaktues teksti që preferoni.
touch htg.sh
gedit htg.sh
Redaktori gedit
do të hapet. Kopjoni dhe ngjisni tekstin e mëposhtëm në redaktues.
#!/bin/bash
echo "htg.service: ## Starting ##" | systemd-cat -p info
while :
do
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
echo "htg.service: timestamp ${TIMESTAMP}" | systemd-cat -p info
sleep 60
done
Ruani ndryshimet tuaja dhe mbyllni redaktorin.
Skenari nuk bën shumë, por ka disa pika që ia vlen të përmenden.
- Dy linjat
echo
dërgohen përmessystemd-cat
, një program që merr daljen nga një program dhe e dërgon atë në ditar. Regjistrimet në ditar kanë përparësi. Ne po përdorim opsionin-p
(përparësi) për të treguar se mesazhet tona janë vetëm për informacion (info). Nuk janë gabime apo paralajmërime të rëndësishme. - Ka një lak të pafund
while
. - Ndryshorja
TIMESTAMP
është caktuar në datën dhe orën aktuale. Ky formatohet në një mesazh dhe dërgohet në ditar. - Skenari më pas fle për 60 sekonda.
- Pas 60 sekondash cikli përsëritet. Pra, ky skenar shkruan një mesazh të vulosur me kohë në ditar një herë në minutë.
Ne do ta kopjojmë skriptin në drejtorinë /usr/local/bin
.
sudo cp htg.sh /usr/local/bin
Dhe ne duhet ta bëjmë atë të ekzekutueshme:
sudo chmod +x /usr/local/bin/htg.sh
Krijimi i skedarit të njësisë së shërbimit
Çdo program që niset nga systemd
ka një skedar përkufizimi, i quajtur skedar i njësisë së shërbimit. Kjo përmban disa atribute që systemd
mund t'i përdorë për të lokalizuar dhe nisur programin dhe për të përcaktuar disa nga sjelljet e tij.
Ne duhet të krijojmë një skedar njësi për shërbimin tonë të ri, por është e kujdesshme të sigurohemi që asnjë nga skedarët e njësisë ekzistuese të mos ketë emrin që duam t'i japim shërbimit tonë të ri.
sudo systemctl list-unit-files --type-service
Mund të lëvizni nëpër listën e skedarëve të njësive, e cila është renditur sipas alfabetit, dhe të kontrolloni që emri që dëshironi të përdorni të mos jetë marrë.
Shërbimi ynë do të quhet htg.service. Asnjë skedar njësie nuk e ka atë emër, kështu që ne mund të vazhdojmë dhe të krijojmë skedarin tonë të njësisë.
sudo gedit /etc/systemd/system/htg.service
Redaktori gedit
do të hapet. Kopjoni dhe ngjisni tekstin e mëposhtëm në redaktues:
[Unit]
Description=How-To Geek Service Example
Wants=network.target
After=syslog.target network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/htg.sh
Restart=on-failure
RestartSec=10
KillMode=process
[Install]
WantedBy=multi-user.target
Ruani ndryshimet tuaja dhe mbyllni redaktorin.
Regjistrimet kanë këto kuptime. Këto janë shënime tipike. Shërbimi ynë i thjeshtë në fakt nuk ka nevojë për shumicën e tyre, por përfshirja e tyre na lejon t'i shpjegojmë ato.
- Përshkrim: Ky është një përshkrim me tekst i shërbimit tuaj.
- Dëshiron: Shërbimi ynë dëshiron, por nuk kërkon që rrjeti të funksionojë përpara se të fillojë shërbimi ynë.
- Pas: Një listë me emrat e njësive që duhen nisur pasi ky shërbim të jetë nisur me sukses, nëse nuk janë duke u ekzekutuar tashmë.
- Lloji: E thjeshtë.
systemd
do ta konsiderojë këtë shërbim të nisur sapo procesi i specifikuar ngaExecStart
të jetë ndërprerë. - ExecStart: Rruga drejt procesit që duhet të fillojë.
- Rinisni: Kur dhe nëse shërbimi duhet të riniset. E kemi vendosur në në dështim.
- RestartSec: Sa kohë duhet pritur përpara se të tentoni të rinisni shërbimin. Kjo vlerë është në sekonda.
- KillMode: Përcakton se si
systemd
duhet ta vrasë procesin nëse i kërkojmësystemctl
të ndalojë shërbimin. Ne e kemi këtë grup për të përpunuar. Kjo bën qësystemd
të përdorë sinjalinSIGTERM
vetëm në procesin kryesor. Nëse shërbimi ynë do të ishte një program jo i parëndësishëm në vend të një skripti të thjeshtë, ne do ta vendosnim këtë në të përzier për të siguruar që çdo proces i krijuar të përfundonte gjithashtu. - WantedBy: Ne e kemi vendosur këtë në multi-user.target, që do të thotë se shërbimi duhet të fillojë për sa kohë që sistemi është në një gjendje ku shumë përdorues mund të identifikohen, pavarësisht nëse ose nuk disponohet një ndërfaqe grafike e përdoruesit.
Skedari i njësisë nuk ka nevojë të jetë i ekzekutueshëm, por lejet në skedarin e njësisë duhet të kufizojnë se kush mund ta modifikojë atë. Ju nuk dëshironi që një përdorues keqdashës ose keqbërës të ndryshojë skedarin e njësisë në mënyrë që ai të ekzekutojë një program tjetër krejtësisht.
Kjo komandë do t'i japë pronarit leje leximi dhe shkrimi, dhe leje leximi për grupin. Të tjerët nuk do të kenë leje.
sudo chmod 640 /etc/systemd/system/htg.service
Ne mund të kemi systemctl
të kontrollojë sintaksën e skedarit tonë të njësisë për ne, edhe nëse shërbimi nuk po funksionon ende. Çdo gabim do të raportohet. (Në fakt, pjesa .service është opsionale për shumicën e komandave.)
systemctl status htg.service
Asnjë gabim nuk është theksuar, që do të thotë se skedari ynë i njësisë është sintaksorisht i saktë.
Fillimi i Shërbimit
Kur shtoni një skedar të ri njësie ose modifikoni një ekzistues, duhet t'i tregoni systemd
që të rifreskojë përkufizimet e skedarit të njësisë.
sudo systemctl daemon-reload
Nëse dëshironi që një shërbim të nisë në fillim, duhet ta aktivizoni atë:
sudo systemctl enable htg
Aktivizimi i një shërbimi nuk e nis atë, ai vendos vetëm që të nisë në kohën e nisjes. Për të nisur shërbimin tani, duhet të përdorni systemctl
me opsionin start
.
sudo systemctl start htg
Verifikimi i Shërbimit
Pas nisjes manuale të shërbimit ose pas rinisjes së kompjuterit, ne mund të verifikojmë që shërbimi ynë funksionon siç duhet.
sudo systemctl status htg.service
Statusi i shërbimit shfaqet për ne.
- Pika jeshile do të thotë se shërbimi ynë funksionon pa probleme.
- Emri i shërbimit është htg.service dhe përshkrimi i gjatë është ai që kemi dhënë në skedarin e njësisë.
- Na tregohet se cili skedar i njësisë është ngarkuar /etc/systemd/system/htg.service.
- Shërbimi është aktiv dhe koha kur u hap shërbimi është e listuar për ne.
- PID e tij është 7762.
- Ka dy detyra që lidhen me shërbimin.
- Një total prej 928 Kibibajt memorie po përdoren nga shërbimi.
- Grupi i kontrollit përfshin skriptin htg.sh dhe komandën
sleep
, e cila është nisur nga htg.sh. Shumicën e kohës, komandasleep
do të kryejë punën për këtë shërbim.
Na janë shfaqur gjithashtu 10 shënimet e fundit të ditarit të prodhuara nga ky shërbim. Çuditërisht, ata janë të gjithë një minutë diferencë.
Ndalimi dhe çaktivizimi i Shërbimit
Nëse keni nevojë të ndaloni shërbimin, mund ta bëni këtë me këtë komandë:
sudo systemctl stop htg.service
Kjo e ndalon shërbimin, por nuk e pengon atë të rifillojë herën tjetër që kompjuteri të rindizet. Për të ndaluar lëshimin e shërbimit në fillim, duhet ta çaktivizoni atë:
sudo systemctl disable htg.service
Nëse shërbimi po funksionon, kjo komandë nuk e ndalon atë. Thjesht i thotë systemd
që të mos e nisë shërbimin në rindezjen tjetër.
Nëse dëshironi të ndaloni shërbimin dhe ta parandaloni nisjen e tij në fillim, përdorni të dyja komandat.
Këshillë shërbimi
Sigurohuni që programi juaj të funksionojë siç pritej përpara se të provoni ta nisni atë si shërbim.
Linux Commands | ||
Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc | |
Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | |
Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
RELATED: Best Linux Laptops for Developers and Enthusiasts