Uusien palveluyksiköiden luominen ja suorittaminen Systemdissä


Muutama päivä sitten törmäsin Centos 8 32-bittiseen distroon ja tunsin halua testata sitä vanhalla 32-bittisellä koneella. Käynnistyksen jälkeen huomasin, että siinä oli bugi ja se oli menettämässä verkkoyhteyttä. Minun piti "ylös" kääntää manuaalisesti joka kerta käynnistyksen jälkeen. Joten kysymys oli, kuinka voin asettaa komentosarjan suorittamaan tätä työtä, joka toimii joka kerta kun käynnistän koneeni?

No, tämä on hyvin yksinkertaista, ja näytän sinulle järjestelmän tavan palveluyksiköiden avulla. Mutta ensin pieni johdatus palveluyksiköihin.

Tässä artikkelissa aion selittää, mikä systemd:n "palveluyksikkö" on ja kuinka helppoa sellaisen luominen ja käyttäminen on. Yritän yksinkertaistaa, mitä "kohteet" ovat, miksi kutsumme niitä "yksikkökokoelmiksi" ja mitkä ovat heidän "toiveensa". Lopuksi hyödynnämme palveluyksikköä suorittaaksemme oman skriptimme käynnistyksen jälkeen.

On selvää, että tietokoneesi on hyödyllinen tarjoamiensa palveluiden ansiosta, ja tämän toiminnon saamiseksi monet palvelut on kutsuttava tietokoneen käynnistyessä ja saavuttaa eri tasot.

Muut palvelut kutsutaan suoritettavaksi, kun tietokone saavuttaa esimerkiksi pelastustason (ajotaso 0) ja muut, kun se saavuttaa usean käyttäjän tason (ajotaso 3) . Voit kuvitella nämä tasot kohteina.

Yksinkertaisella tavalla kohde on kokoelma palveluyksiköitä. Jos haluat tarkastella graphical.target-tasollasi toimivia palveluyksiköitä, kirjoita:

systemctl --type=service

Kuten näet, jotkut palvelut ovat aktiivisia ja "käynnissä" koko ajan, kun taas toiset toimivat kerran ja päättyvät (poistutaan).

Jos haluat tarkistaa palvelun tilan, voit käyttää systemctl-komentoa kuvan mukaisesti.

systemctl status firewalld.service

Kuten näet, tarkistin tiedoston firewalld.service tilan (vinkki: voit käyttää automaattista täydennystä palvelun nimenä ). Se ilmoittaa minulle, että palomuuri-palvelu on käynnissä koko ajan ja se on käytössä.

Käytössä ja pois käytöstä tarkoittaa, että palvelu ladataan pysyvästi tai ei, vastaavasti seuraavan käynnistyksen aikana. Toisaalta palvelun käynnistämiseen ja lopettamiseen liittyy nykyisen istunnon rajoitus, eikä se ole pysyvää.

Jos esimerkiksi kirjoitat:

systemctl stop firewalld.service
systemctl status firewalld.service

Voit nähdä, että firewalld.service ei ole aktiivinen (kuollut), mutta se on silti käytössä, mikä tarkoittaa, että se ladataan seuraavan käynnistyksen aikana. Joten jos haluamme palvelun latautuvan käynnistyksen aikana tulevaisuudessa, meidän on otettava se käyttöön. Mikä hieno päätelmä! Luodaan sellainen, se on helppoa.

Jos menet kansioon:

cd /etc/systemd/system
ls -l

Näet joitakin yksikköpalveluiden linkkitiedostoja ja joitain kohteen "halua"-hakemistoja. Esimerkiksi se, mitä usean käyttäjän kohde haluaa ladata, kun käynnistysprosessi saavuttaa tasonsa, luetellaan hakemistossa nimellä /etc/systemd/system/multi-user.target.wants/ .

ls multi-user.target.wants/

Kuten näet, se ei sisällä vain palveluita vaan myös muita kohteita, jotka ovat myös palvelukokoelmia.

Tehdään palveluyksikkö, jonka nimi on connection.service.

vim connection.service

ja kirjoita seuraava (näpäytä ”i ” lisäystilaa varten), tallenna se ja poistu (komennoilla “esc ” ja “:wq! ” ) :

[Unit]
Description = making network connection up
After = network.target

[Service]
ExecStart = /root/scripts/conup.sh

[Install]
WantedBy = multi-user.target

Ylläolevan selventämiseksi: olemme luoneet palvelutyypin yksikön (voit myös luoda kohdetyypin yksiköitä) ja asettanut sen latautumaan network.target:n jälkeen (voit ymmärtää, että käynnistysprosessi saavuttaa kohteet määritetyssä järjestyksessä) ja haluamme aina, kun palvelu alkaa suorittaa bash-komentosarjan nimellä conup.sh, jonka aiomme luoda.

Hauskuus alkaa viimeisestä osasta [asennus]. Se kertoo, että "multi-user.target" haluaa sen. Joten jos otamme palvelumme käyttöön, multi-user.target.wants-kansioon luodaan symbolinen linkki kyseiseen palveluun! Sain sen? Ja jos poistamme sen käytöstä, linkki poistetaan. Niin yksinkertaista.

Ota se käyttöön ja tarkista:

systemctl enable connection.service

Se ilmoittaa, että symbolinen linkki multi-user.target.wants-kansioon on luotu. Voit vahvistaa suorittamalla ls-komennon kuvan osoittamalla tavalla.

ls multi-user.target.wants/

Kuten näet, "connection.service" on valmis seuraavaan käynnistykseen, mutta meidän on ensin luotava komentosarjatiedosto.

cd /root
mkdir scripts
cd scripts
vim conup.sh

Lisää seuraava rivi Vimiin ja tallenna se:

#!/bin/bash
nmcli connection up enp0s3

nmcli-komento tuo esiin verkkoyhteyden enp0s3-rajapinnalle.

Tietenkin, jos haluat komentosarjasi suorittavan jotain muuta, voit kirjoittaa mitä haluat toisen rivin sijasta.

Esimerkiksi,

#!/bin/bash
touch /tmp/testbootfile

joka luo tiedoston /tmp-kansioon (vain varmistaakseen, että palvelusi toimii).

Meidän on myös tehtävä komentosarjasta suoritettava suorittamalla chmod-komento kuvan mukaisesti.

chmod +x conup.sh

Nyt olemme valmiita. Jos et halua odottaa seuraavaan käynnistykseen asti (se on jo käytössä), voimme käynnistää palvelun nykyiselle istunnolle kirjoittamalla:

systemctl start connection.service

Voila! Yhteyteni on kunnossa!

Jos olet päättänyt kirjoittaa komentosarjan sisään komennon "touch /tmp/testbootfile" sen toimivuuden tarkistamiseksi, näet tämän tiedoston luotuna /tmp-kansiossa. .

Toivon todella, että voin auttaa sinua selvittämään, mistä palveluista, tarpeista, kohteista ja komentosarjojen suorittamisesta käynnistyksen aikana on kyse.