![Beste tips om bestanden sneller te kopiëren en de productiviteit te verbeteren](/f/cf7815329dedf785e870fccef502648a.png?width=100&height=100)
Een paar dagen geleden kwam ik een Centos 7 32-bit distro en ik voelde de wens om het te testen op een oude 32-bits machine. Na het opstarten realiseerde ik me dat er een fout zat en dat de netwerkverbinding werd verbroken, wat ik moest veranderen "omhoog" handmatig elke keer na het opstarten. Dus de vraag was hoe ik een script kon instellen dat deze taak uitvoert, elke keer dat ik mijn machine opstart?
Nou, dit is heel eenvoudig en ik zal je de systemd-manier laten zien met behulp van service-eenheden. Maar eerst een kleine introductie tot service units.
In dit artikel ga ik uitleggen wat een "service-eenheid" in systemd is, hoe eenvoudig het is om er een te maken en uit te voeren. Ik zal proberen te vereenvoudigen wat "doelen" zijn, waarom noemen we ze "verzamelingen van eenheden" en wat zijn hun "wil". Eindelijk maken we gebruik van een service-eenheid om ons eigen script uit te voeren na de opstartprocedure.
Het is duidelijk dat uw computer nuttig is vanwege de services die deze biedt en om deze functionaliteit te hebben, moeten veel services worden aangeroepen terwijl de computer opstart en verschillende niveaus bereikt. Andere services worden aangeroepen om te worden uitgevoerd wanneer de computer bijvoorbeeld het reddingsniveau bereikt (
runlevel 0) en anderen wanneer het het niveau voor meerdere gebruikers bereikt (runlevel 3). Je kunt je deze niveaus voorstellen als: doelen.Doel is op een eenvoudige manier een verzameling service-units. Als u een kijkje wilt nemen in de service-units die in uw grafisch.doel niveau, typ:
# systemctl --type=service.
Zoals u kunt zien, zijn sommige services actief en "rennen" de hele tijd, terwijl anderen eenmalig worden uitgevoerd en eindigen (afgesloten). Als u de status van een service wilt controleren, typt u:
# systemctl-status firewalld.service.
Zoals je kunt zien heb ik de status van. gecontroleerd firewalld.service
(tip: u kunt de auto-complete gebruiken voor de naam van de service). Het informeert me dat firewalld service is altijd actief en is ingeschakeld.
Mis het niet:FirewallD-service configureren in CentOS 7
Ingeschakeld en uitgeschakeld betekent dat de service permanent wordt geladen of niet, respectievelijk tijdens de volgende keer opstarten. Aan de andere kant heeft het starten en stoppen van een service de beperking van de huidige sessie en is het niet permanent.
Als u bijvoorbeeld typt:
# systemctl stop firewalld.service. # systemctl-status firewalld.service.
Je kunt zien dat de firewalld.service
is inactief (dood) maar het is nog steeds ingeschakeld, wat betekent dat het tijdens de volgende keer opstarten zal worden geladen. Dus als we willen dat een service in de toekomst tijdens het opstarten wordt geladen, moeten we deze inschakelen. Wat een geweldige conclusie! Laten we er een maken, het is gemakkelijk.
Als je naar de map gaat:
# cd /etc/systemd/system. # ls-l.
U kunt enkele linkbestanden van unitservices en enkele mappen van de "wil" van een doel. Bijvoorbeeld: wat het doel voor meerdere gebruikers geladen wil worden wanneer de opstartprocedure zijn niveau bereikt, wordt vermeld in de map met naam /etc/systemd/system/multi-user.target.wants/.
# ls multi-user.target.wants/
Zoals je kunt zien, bevat het niet alleen Diensten maar ook andere doelen die ook verzamelingen van diensten zijn.
Laten we een service-eenheid maken met de naam verbinding.service.
# vim verbinding.service.
en typ het volgende (hit "I"
voor invoegmodus), sla het op en sluit af (met "Esc"
en “:wk!”
) :
[Eenheid] Beschrijving = netwerkverbinding tot stand brengen. Na = netwerk.doel [Service] ExecStart = /root/scripts/conup.sh [Installeren] WantedBy = doel voor meerdere gebruikers.
Om het bovenstaande uit te leggen: we hebben een eenheid van het servicetype gemaakt (u kunt ook eenheden van het doeltype maken), we hebben ingesteld dat deze wordt geladen na de netwerk.doel (je kunt begrijpen dat de opstartprocedure de doelen bereikt met een gedefinieerde volgorde) en we willen dat elke keer dat de service begint een bash-script uit te voeren met de naam conup.sh die we gaan maken.
De lol begint bij het laatste deel [installeren]. Het vertelt dat het zal worden gezocht door "doel voor meerdere gebruikers". Dus als we onze service inschakelen, wordt er een symbolische link naar die service gemaakt in de multi-user.target.wants map! Begrepen? En als we het uitschakelen, wordt die link verwijderd. Zo simpel.
Schakel het gewoon in en controleer:
# systemctl activeer connection.service.
het informeert ons dat de symbolische link in de multi-user.target.wants map is aangemaakt. Controleer het:
# ls multi-user.target.wants/
Zoals je kunt zien “verbinding.service” is klaar voor de volgende keer opstarten, maar we moeten eerst het scriptbestand maken.
# cd /root. # mkdir-scripts. # cd-scripts. # vim conup.sh.
Voeg de volgende regel toe: vim en sla het op:
#!/bin/bash. nmcli-verbinding omhoog enp0s3.
Als u wilt dat uw script iets anders uitvoert, kunt u natuurlijk wat u maar wilt typen in plaats van de tweede regel.
Bijvoorbeeld,
#!/bin/bash. raak /tmp/testbootbestand aan.
dat zou een bestand binnenin creëren /tmp map (om te controleren of uw service werkt).
We moeten het script ook uitvoerbaar maken:
# chmod +x conup.sh.
Nu zijn we klaar. Als u niet wilt wachten tot de volgende keer opstarten (het is al ingeschakeld), kunnen we de service starten voor de huidige sessietypering:
# systemctl start verbinding.service.
Voila! Mijn verbinding is in de lucht!
Als je ervoor hebt gekozen om de opdracht te schrijven "raak /tmp/testbootfile" in het script, alleen om de functionaliteit te controleren, zie je dit bestand binnenin gemaakt /tmp map.
Ik hoop echt dat ik je kan helpen erachter te komen waar het bij het opstarten om draait bij services, wensen, doelen en het uitvoeren van scripts.