Kumpletong tutorial ng command na systemctl sa Linux

Huling pag-update: 17/12/2025
May-akda: Isaac
  • Ang systemctl ay ang pangunahing interface para sa pamamahala ng mga serbisyo, yunit, at target ng systemd sa karamihan ng mga distribusyon. Linux kasalukuyang.
  • Pinapayagan ka nitong simulan, ihinto, i-restart, i-reload, paganahin at huwag paganahin ang mga serbisyo, pati na rin siyasatin ang kanilang katayuan, mga dependency, at mga file sa drive.
  • Pinapalitan ng mga target (.target) ang mga klasikong runlevel at ginagawang mas madali ang pagbabago ng pandaigdigang estado ng sistema (multi-user, graphical, rescue, shutdown o reboot).
  • Ang kontroladong pag-edit ng yunit at ang pinagsamang paggamit ng systemctl at journalctl ay susi sa pag-debug ng mga error at pagpapanatili ng isang matatag na sistema.

tutorial na utos ng systemctl sa linux

Upang mangibabaw systemctl at systemd Halos kailangan na ito ngayon kung namamahala ka ng mga modernong Linux server o system. Ang tool na ito ang daan patungo sa pagkontrol kung aling mga serbisyo ang nagsisimula, paano sila nagsisimula, kung ano ang nabigo, at ang aktwal na estado ng iyong system sa anumang oras. Kapag nasanay ka na rito, makakaiwas ka sa maraming sakit ng ulo at maraming hindi kinakailangang pag-restart.

Sa buong gabay na ito, makikita mo sa maayos na paraan at may mga halimbawa kung paano gamitin systemctl upang pamahalaan ang mga serbisyo, yunit, at layuninPaano ilista ang mga nangyayari sa system, paano i-edit ang mga drive nang hindi nasisira ang anumang bagay, ano ang ibig sabihin ng mga estado? Pinagana, lihim o statikAt gayundin Trick Para i-shut down, i-restart, o lumipat mula sa graphical mode patungo sa text mode gamit ang isang command lang. Lahat gamit ang isang Espanyol mula sa Espanya, direkta at praktikal, dinisenyo upang mailapat mo ang iyong nababasa sa anumang systemd-based distro (Ubuntu, Debian, RHEL, CentOS, Fedora, Arch, atbp.).

Ano ang systemd at ano ang papel na ginagampanan ng systemctl?

Sa karamihan ng mga kasalukuyang distribusyon, Ang systemd ay gumaganap bilang isang startup system at base infrastructureIto ang prosesong nagsisimula pagkatapos ng kernel (karaniwan ay bilang PID 1) at responsable sa pagsisimula ng iba pang mga serbisyo, pag-mount ng mga file system, pamamahala ng mga dependency, pagkontrol sa mga sesyon, pag-log ng mga kaganapan at marami pang iba.

Ang systemd ay binubuo ng mga daemon, aklatan, at mga kagamitan na nagpapahintulot sa komunikasyon sa kernel at espasyo ng gumagamit: namamahala sa mga control group (cgroup), socket, timer, mount point, pangunahing configuration ng network, time synchronization, name resolution, mga container, at virtual machineat tugma pa nga sa mga mas lumang SysV at LSB script, kaya maaari nitong ganap na palitan Klasikong Sysvinit.

Sa loob ng buong ekosistemang ito, Ang systemctl ay ang "remote control" ng systemdIto ang online na gamit ng comandos na ginagamit mo para sa:

  • Simulan, ihinto, i-restart, o i-reload ang mga serbisyo at iba pang uri ng mga yunit.
  • Paganahin o huwag paganahin ang mga yunit para makapagsimula sila (o hindi) sa sistema.
  • Suriin ang katayuan ng mga serbisyo, mga layunin at ang sistema sa pangkalahatan.
  • I-edit ang mga file ng drive o tingnan ang mga dependency at internal properties nito.
  • Baguhin ang pandaigdigang estado ng sistema (rescue mode, multi-user, graphical, shutdown, restart…).

Tandaan na hindi lahat ng distribusyon ay gumagamit ng systemd. Kung kapag tumatakbo systemctl Makakakita ka ng mensaheng ganito: bash: systemctl: command not found O katulad nito; malamang na gumagamit ang iyong sistema ng ibang init system (OpenRC, runit, pure SysV, atbp.). Sa ganitong kaso, Hindi nalalapat ang mga utos sa gabay na ito bilang ito ay.

Mga drive at mga file ng drive sa systemd

Ang pangunahing konsepto sa systemd ay ang mga yunitAng isang unit ay kumakatawan sa anumang resource na kayang pamahalaan ng systemd: isang service, isang socket, isang mount point, isang device, isang system-global goal, isang timer… Ang bawat uri ng unit ay kinikilala ng isang hulapi sa pangalan ng file.

Ilan sa mga pinakakaraniwang uri ng mga yunit na makikita mo kapag ginagamit mo ito systemctl at systemd tunog:

  • .serbisyo: mga serbisyo at mga demonyo (nginx.service, SSH.service, NetworkManager.service…).
  • .socket: ang mga socket na nauugnay sa mga serbisyo ay sinisimulan kapag hiniling.
  • .mount: mga mount point ng file system.
  • .awtomatikong pag-mount: mga awtomatikong asembliya na na-activate para sa paggamit.
  • .target: mga "estado" ng sistema (multi-user.target, graphical.target, rescue.target…).
  • .timer: mga timer na naglulunsad ng mga serbisyo sa mga tiyak na oras.
  • aparato: mga device na pinamamahalaan ng udev.
  • .landas: mga monitor ng ruta sa disk na nagpapalitaw ng mga serbisyo.

Ang bawat yunit ay tinukoy sa isang file ng yunitna isang text file na may mga seksyon tulad ng , , , kung saan ang paglalarawan, mga dependency, at mga utos ng ay nakadetalye boot, user na nagpapatakbo ng serbisyo, atbp. Ang mga file na ito ay karaniwang nakaimbak sa:

  • /lib/systemd/system/ o /usr/lib/systemd/system/: mga yunit na kasama ng mga pakete.
  • / etc / systemd / system /: mga yunit na tinukoy o pinatungan ng administrator.

kapag kasama mo sa trabaho systemctlHalos palagi kang tumutukoy sa mga yunit ng uri .serbisyoGayunpaman, kung aalisin mo ang hulapi, ipinapalagay ng systemd bilang default na ang tinutukoy mo ay isang serbisyo. Ibig sabihin, systemctl start ssh y systemctl start ssh.service ay katumbas.

May mga espesyal na yunit na tinatawag na mga template, na ang pangalan ay kinabibilangan ng @, Halimbawa name@.serviceKapag nag-instantiate ng template bilang name@miinstancia.serviceAng ginagawa mo ay ang paglikha ng isang isang partikular na pagkakataon na nagpapasa ng isang identifier; sa loob ng unit file, ang variable %i Ito ay pinapalitan ng identifier na iyon. Karaniwang ginagamit ito sa mga SSH tunnel, mga serbisyo ng network interface, atbp.

Suriin kung gumagamit ang iyong system ng systemd

Bago ka magmadali sa mga utos, mainam na suriin muna kung ang iyong distro ay talagang gumagamit ng systemd bilang PID 1Maraming gabay ang nagmumungkahi ng isang bagay na kasing simple ng:

pstree | head -5

Kung sa tuktok ng puno ay makakakita ka ng isang proseso systemdMaaari kang magpatuloy nang walang anumang problema. Kung makakita ka ng ibang init system, kakailanganin mong gamitin ang mga partikular na tool para sa startup system na iyon.

Pamamahala ng pangunahing serbisyo gamit ang systemctl

Ang pang-araw-araw na operasyon gamit ang systemd ay karaniwang nakatuon sa Simulan, ihinto, i-restart, at i-reload ang mga serbisyoAng mga utos na ito ay nakakaapekto sa kasalukuyang estado ng serbisyo, hindi kung awtomatiko itong magsisimula sa sistema.

Sa suriin ang katayuan ng isang serbisyo, pwede mong gamitin:

systemctl status nombre_servicio.service

Halimbawa, para makita kung paano gumagana ang serbisyo ng network systemd-networkd sa isang text-mode na Ubuntu system:

  Kumpletong gabay sa pagpapalit at pag-customize ng wallpaper sa Windows 11

systemctl status systemd-networkd.service

Ang utos na ito ay nagpapakita ng medyo detalyadong impormasyon: katayuan (aktibo, hindi aktibo, nabigo…), noong ito ay na-activate, ang pangunahing PID, paggamit ng CPU, at ilang kamakailang mensahe ng log na lubhang kapaki-pakinabang para sa pag-diagnose ng mga problema.

Kung gusto mo ng mas direkta, maaari mong gamitin ang mga partikular na baryasyong ito:

  • Aktibo ang systemctl name.service: ay nagpapahiwatig kung ito ay aktibo (tumatakbo) o hindi.
  • pinagana ang systemctl name.service: ay nagpapahiwatig kung magsisimula ito sa simula.
  • Nabigo ang systemctl name.service: sinusuri kung pumasok ito sa isang estado ng pagkakamali.

Halimbawa, para makita kung naka-enable ang systemd-networkd sa startup, maaari mong patakbuhin ang:

systemctl is-enabled systemd-networkd.service

At para malaman kung nabigo itong magsimula sa anumang punto:

systemctl is-failed systemd-networkd.service

Pagsisimula, paghinto, pag-restart, at pag-reload ng mga serbisyo

Sa ihinto ang isang serbisyong tumatakboAng karaniwang pagkakasunud-sunod ay:

sudo systemctl stop nombre_servicio.service

Tandaan na dahil ito ay isang aksyon na nakakaapekto sa sistema, kakailanganin mo mga pribilehiyo ng administrasyon, karaniwang ginagamit sudoSa ilang "matigas ang ulo" na serbisyo, tulad ng systemd-networkd, ang paghinto sa mga ito ay magiging sanhi ng agarang pag-restart ng mga ito kung mayroong unit na nangangailangan ng mga ito at may mga patakaran sa awtomatikong pag-restart.

Kung itinigil ang serbisyo at gusto mo simulan itoGinagamit mo ang parehong pattern gamit ang start:

sudo systemctl start systemd-networkd.service

Kapag binago mo ang isang configuration file at gusto mong ilapat ang mga pagbabago, ang pinakakaraniwang gawin ay muling simulan ang serbisyo:

sudo systemctl restart nombre_servicio.service

Maraming demonyo ang nagpapahintulot I-reload ang iyong mga setting nang hindi lubusang nagre-restartpag-iwas sa pagputol ng mga aktibong koneksyon. Sa mga kasong ito, ginagamit ang mga sumusunod:

sudo systemctl reload nombre_servicio.service

Kung hindi ka sigurado kung sinusuportahan ng serbisyong iyon ang mga top-up, maaari mong subukan ang:

sudo systemctl reload-or-restart nombre_servicio.service

Sa utos na ito, Sinusubukan muna ng systemctl na i-reload At kung hindi magsasagawa ng reload ang unit, magpapatuloy ito sa isang ganap na pag-reboot. Ito ay lubhang kapaki-pakinabang kapag hindi mo matandaan ang partikular na kilos ng bawat daemon.

Paganahin at huwag paganahin ang mga serbisyo sa pagsisimula

Lahat ng nakita natin sa ngayon ay nakakaapekto lamang sa kasalukuyang sesyonKung gusto mong awtomatikong magsimula ang isang serbisyo kapag nag-boot ang system, kailangan mong paganahin itoAng pangunahing utos ay:

sudo systemctl enable nombre_servicio.service

Sa paggawa nito, lumilikha ang systemd simbolikong mga link mula sa file ng serbisyo ng sistema (karaniwan ay nasa /lib/systemd/system o /etc/systemd/system) hanggang sa isang direktoryo .wants naaayon sa target kung saan ito dapat i-activate. Halimbawa, tulad ng:

/etc/systemd/system/multi-user.target.wants/nombre_servicio.service

Kung gusto mo ang eksaktong kabaligtaran, iyon ay, pigilan ang awtomatikong pagsisimula ng isang serbisyo I-disable ito sa susunod na startup:

sudo systemctl disable nombre_servicio.service

Inaalis nito ang mga simbolikong boot link, ngunit Hindi nito pinipigilan ang serbisyong tumatakbo naGayundin, ang pagpapagana ng isang serbisyo ay hindi agad na nagpapasimula nito: magiging epektibo lamang ito pagkatapos ng susunod na pag-reboot, maliban kung pagsamahin mo ang mga sumusunod:

sudo systemctl enable nombre_servicio.service
sudo systemctl start nombre_servicio.service

Ang ilang distribusyon at mga kagamitan ay nag-aalok ng mga shortcut para sa paganahin at simulan nang sabayGayunpaman, ang karaniwang paraan sa systemctl ay karaniwang patakbuhin ang parehong mga utos.

Tingnan ang pangkalahatang kalagayan ng mga yunit

Ang systemctl ay hindi lamang kapaki-pakinabang para sa paghawak sa mga indibidwal na serbisyo; pinapayagan din nito magkaroon ng pangkalahatang-ideya ng sistemaAng pinakakaraniwang utos ay:

systemctl list-units

Ipinapakita ng listahang ito ang lahat ng aktibong yunit na nasa memorya ng systemd. Ang mga pangunahing kolum ay:

  • UNIT: pangalan ng yunit (halimbawa, sshd.service).
  • lOAD: kung ang file ng drive ay na-load nang tama (na-load, hindi natagpuan, error…).
  • ACTIVE: pangkalahatang kalagayan (aktibo, hindi aktibo, nabigo…).
  • Sub: mas naglalarawang substate (tumatakbo, lumabas, patay, nabigo…).
  • DESCRIPTION: maikling paglalarawan ng yunit.

Kung tatawag ka systemctl nang walang mga argumentoMakikita mo halos ang parehong listahan, dahil iyon ang default na gawi nito. Dahil tanging mga aktibong yunit lamang ang ipinapakita, halos lahat ay lilitaw na may LOAD=loaded at ACTIVE=active.

Para maisama rin ang mga hindi aktibong yunit, maaari mong idagdag ang indicator --all:

systemctl list-units --all

Maaari mo ring i-filter ayon sa estado gamit ang --state=Halimbawa, para makita lamang ang mga hindi aktibong drive:

systemctl list-units --all --state=inactive

O kaya naman ay i-filter ayon sa uri ng unit gamit ang --type=Halimbawa, para makita lamang ang mga aktibong serbisyo:

systemctl list-units --type=service

Ilista ang lahat ng naka-install na file ng drive

Ang listahan sa itaas ay nagpapakita lamang ng mga unit na sinubukang i-load ng systemd. Kung gusto mong malaman ang higit pa. lahat ng drive na nasa diskGagamitin mo man ang mga ito o hindi, dapat mong gamitin ang:

systemctl list-unit-files

Dito, ang pokus ay nasa mismong mga unit file, hindi sa kanilang estado sa memorya. Makakakita ka ng dalawang pangunahing column: YUNIT FILE y STATESa STATE, lumilitaw ang mga halagang tulad ng mga sumusunod:

  • PinaganaAng yunit ay naka-configure upang awtomatikong magsimula.
  • hindi pinaganaHindi ito naka-configure para sa awtomatikong pagsisimula.
  • statikWalang seksyon ang yunit , kaya hindi kayang paganahin ang sarili nitoKadalasan, ito ay isang pagdepende sa ibang mga yunit o upang magsagawa ng isang partikular na aksyon.
  • lihimAng yunit ay ganap na nakakandado; hindi ito maaaring simulan sa anumang paraan.

Maaari mo ring i-filter ayon sa status, halimbawa para makita lamang ang mga naka-enable na unit:

systemctl list-unit-files --state=enabled

O pagsamahin ang maraming estado sa isang query sa pamamagitan ng paghihiwalay sa mga ito gamit ang mga kuwit:

systemctl list-unit-files --state=enabled,failed

Tingnan ang mga detalye, katangian, at mga dependency ng isang unit

Kung nais mong tingnan ang aktwal na nilalaman ng drive file Dahil ang systemd ay gumagamit ng pinaka-maginhawang utos, ito ay:

systemctl cat nombre.service

Ipinapakita nito ang file ayon sa nakikita ng systemd, kasama ang anumang mga override fragment mula sa /etc/systemd/systemIto ay lubhang kapaki-pakinabang para sa pagkumpirma na ang iyong mga pagbabago ay talagang isinaalang-alang.

Upang siyasatin ang puno ng pagdepende Mula sa isang yunit, maaari mong gamitin ang:

systemctl list-dependencies nombre.service

Ang output ay hierarchical, na nagpapakita kung aling mga layunin at serbisyo ang nagtutulak sa serbisyong pinag-uusapan. Ang mga yunit ng uri .target Gumagana ang mga ito bilang mga grouping point at ipinapakita lamang nila nang paulit-ulit ang kanilang mga dependency bilang default; kung gusto mong palawakin ang buong puno, idagdag --all.

Kung ang kailangan mong malaman ay kung aling mga yunit ang nakadepende sa iyong ipinahiwatig, idinagdag --reverse sa utos. At kung gusto mong tumuon sa boot order, ang mga flag --before y --after Ipinapakita ng mga ito ang mga yunit na dapat magsimula bago o pagkatapos ng target na yunit.

  Paano mag-download ng mga mod at add-on na nilalaman gamit ang Steam Workshop

Upang makita ang lahat mga panloob na katangian ng isang yunit sa format na key=value, gamitin ang:

systemctl show nombre.service

At kung interesado ka lang sa isang partikular na ari-arian, maaari mong i-filter gamit ang -pHalimbawa, para tingnan ang mga conflict sa sshd:

systemctl show sshd.service -p Conflicts

Mga yunit ng pagtakip at pag-alis ng takip

Bukod sa pag-disable, pinapayagan ng systemd ang itago ang isang yunit nang sa gayon ay imposibleng i-boot itoGinagamit ang pamamaraang ito kapag gusto mong maging 100% sigurado na may hindi magsisimula, kahit aksidente lang. Maaari itong gawin nang manu-mano o sa pamamagitan ng pag-asa sa ibang unit.

Ang pagtatakip ay ipinapatupad sa pamamagitan ng paglikha ng isang simbolikong link sa /dev/null sa halip na ang aktwal na file ng drive. Para i-mask ang isang serbisyo, halimbawa nginx:

sudo systemctl mask nginx.service

Kung tatakbo ka pagkatapos systemctl list-unit-files, makikita mo yan Lumilitaw ang nginx.service bilang nakamaskaraAt kung susubukan mong simulan ito:

sudo systemctl start nginx.service

Makakatanggap ka ng mensaheng ganito: Nabigong simulan ang nginx.service: Nakatago ang unit na nginx.service. Sa madaling salita, ang yunit ay nakabaluti. Upang magamit itong muli, kinakailangan na ilabas ang kanyang maskara:

sudo systemctl unmask nginx.service

Pagkatapos nito, ang unit ay babalik sa dating estado nito (naka-enable, naka-disable, static, atbp.) at pagkatapos ay maaari nang simulan o paganahin nang normal.

I-edit ang mga file ng drive nang hindi sinisira ang system

Minsan kailangan mong isaayos ang kilos ng isang serbisyo: baguhin ang user na nagpapatakbo nito, magdagdag ng mga opsyon sa command-line, baguhin ang mga dependency… Sa halip na manu-manong i-edit ang mga file sa /lib/systemd/systemAng pinakaligtas na bagay ay ang paggamit ng sarili mong systemctl para makabuo ng mga override.

Ang pangunahing utos ay:

sudo systemctl edit nombre.service

Magbubukas ito ng iyong default na editor gamit ang isang walang laman na file ng fragmentKapag nag-save ka at lumabas, gagawa ang systemd ng direktoryo sa /etc/systemd/system/nombre.service.d/ at sa loob ng isang file override.confKapag nilo-load ang drive, pinagsasama ng systemd ang orihinal na file sa fragment na ito, at ang mga override directives may priority sila sa mga nasa base file.

Kung gusto mong i-edit ang kumpletong file ng drive Sa halip na isang override, magagawa mo ito gamit ang:

sudo systemctl edit --full nombre.service

Sa kasong ito, ang iyong ise-save ay isusulat sa /etc/systemd/system/nombre.servicena mas inuuna kaysa sa bersyon ng sistema sa /lib/systemd/systemIto ay isang paraan para "i-clone" at ganap na i-customize ang isang drive nang hindi inaalis ang mga file na kasama ng package.

Kung sakaling magdesisyon kang i-undo ang iyong mga pagbabago, kailangan lang burahin ang direktoryong .d ng override o ang binagong service file sa /etc/systemd/system. Halimbawa:

sudo rm -r /etc/systemd/system/nginx.service.d
sudo rm /etc/systemd/system/nginx.service

Pagkatapos tanggalin ang mga item na ito, napakahalagang patakbuhin ang:

sudo systemctl daemon-reload

Pinipilit nito ang systemd na I-reload ang lahat ng mga file ng driveKalimutan ang mga inalis na override at bumalik sa paggamit ng mga orihinal na kahulugan ng system.

Mga target at adaptasyon sa runlevel

Los Ang mga systemd target ay ang modernong katumbas ng mga runlevel mula sa SysV. Sila ay mga espesyal na yunit (nagtatapos sila sa .target) na nagpapangkat ng iba pang mga yunit upang kumatawan sa mga "estado" o mga punto ng pag-synchronize ng sistema.

Por ejemplo:

  • multi-user.target: multi-user console mode, tipikal sa mga server na walang graphical na kapaligiran.
  • graphical.target: graphical mode; karaniwang nakadepende sa multi-user.target at idinaragdag ang graphical interface layer.
  • iligtas.target: rescue mode, katulad ng "single user mode".
  • swap.target: punto kung saan handa nang gamitin ang lugar ng palitan.

Maaaring magdeklara ang mga yunit ng mga ugnayan tulad ng WantedNi=, RequiredNi=, Wants=, Requirees=, After= kasama ang mga layuning ito upang ipahiwatig kung saan nakasalalay ang mga ito at sa anong pagkakasunud-sunod dapat makamit ang mga ito.

Upang malaman Ano ang paunang natukoy na layunin? ng iyong system (ang estado na gusto mong maabot sa isang normal na boot), gamitin ang:

systemctl get-default

Halimbawa, kung mas gusto mong palaging magsimula ang sistema sa graphical mode, maaari mo itong baguhin gamit ang:

sudo systemctl set-default graphical.target

Para makita ang lahat ng target na naka-install sa system, kasama ang kanilang status (enabled, disabled…), maaari mong patakbuhin ang:

systemctl list-unit-files --type=target

At kung ang gusto mo ay makita kung aling mga target ang aktibo ngayonGagawin mo ito gamit ang:

systemctl list-units --type=target

Ihiwalay ang mga layunin at baguhin ang paraan ng pagtatrabaho

Isa sa mga pinakamakapangyarihang bagay na iniaalok ng systemd ay ang kakayahang pagbabago ng estado ng sistema sa pamamagitan ng "paghihiwalay" ng isang targetKapag nagsagawa ka ng isang isolation, ina-activate ng systemd ang lahat ng unit na kinakailangan para sa layuning iyon at pinipigilan ang mga hindi na akma sa dependency tree nito.

Isipin na ikaw ay nasa isang graphical na kapaligiran (aktibo graphical.targetat gusto mong lumipat sa isang text-only, multi-user na kapaligiran, halimbawa para sa mga gawain sa pagpapanatili. Maaari mo munang suriin ang mga dependency ng multi-user.target:

systemctl list-dependencies multi-user.target

At kapag sigurado ka nang wala kang mapapahamak na kritikal na bagay, ilulunsad mo ang:

sudo systemctl isolate multi-user.target

Dahil ang graphical.target ay nakadepende sa multi-user.target ngunit hindi sa kabaliktaran, ang paghihiwalay sa multi-user target ay pipigil dito. lahat ng serbisyong nauugnay sa graphics layeriiwan ka sa text mode. Isa itong malaking pagbabago, kaya gamitin ito nang matalino.

Para sa mga karaniwang kaganapan, nag-aalok ang systemctl mga madaling paraan kumpara sa pagsusulat gamit ang kamay. Ilan sa mga pinakakaraniwang ginagamit ay:

  • sudo systemctl pagsagip: lilipat sa rescue mode (katumbas ng pag-ihiwalay sa rescue.target) at aalertuhan ang mga konektadong user.
  • sudo systemctl ihinto: pinapatigil ang sistema (katulad ng pagpatay sa CPU nang hindi pinuputol ang kuryente).
  • sudo systemctl poweroffPatayin nang tuluyan ang makina.
  • sudo systemctl reboot: ire-restart ang sistema.

Karaniwan, ang mga klasikong utos tulad ng reboot, poweroff o halt Nakakonekta sila sa loob upang makipag-usap sa systemd, kaya kumikilos sila nang naaayon sa mga shortcut na ito.

Karagdagang mahahalagang utos ng systemctl

Bukod sa lahat ng nabanggit, may ilang mga utos para sa systemctl na dapat mong laging nasa kamay dahil madalas mo itong gagamitin kapag nagtatrabaho sa mga yunit:

  Paano madaling pamahalaan ang mga pakete ng AppImage sa Linux

I-reload ang configuration ng systemd (hindi ang mga serbisyo):

sudo systemctl daemon-reload

Sa tuwing babaguhin o idadagdag mo ang mga file ng drive, kailangan mong ipaalam sa systemd para mabasa nito muli ang mga ito. Ang utos na ito hindi nagre-restart ang mga serbisyoNire-reload lang nito ang database ng unit.

Suriin ang katayuan ng isang serbisyo na may mga detalye (napag-usapan na):

sudo systemctl status nombre_servicio.service

Dito mo makikita ang Loaded, Active status, PID, uptime, at ang mga pinakabagong log message, na napakahalaga para sa pag-debug ng mga error.

Paganahin at huwag paganahin ang mga serbisyo (nakita rin):

sudo systemctl enable nombre_servicio.service
sudo systemctl disable nombre_servicio.service

Simulan, ihinto, at i-restart ang mga serbisyo tahasang:

sudo systemctl start nombre_servicio.service
sudo systemctl stop nombre_servicio.service
sudo systemctl restart nombre_servicio.service

Ang mga pattern na ito ay inuulit sa halos anumang serbisyo, mula sa apache2, nginx o ssh, hanggang sa mga serbisyo ng mga database, impresyon ng mga demonyo o kahit ano pa na maisip mo.

Pamamahala ng serbisyo: simulan, i-reload, ihinto, at subaybayan

Sa totoong mundo, gagamitin mo ang systemctl upang mapanatiling laging gumagana ang mga mahahalagang serbisyo: mga web server, mga database, mga serbisyo ng network, mga daemon backupatbp. Ang ideya ay upang mabawasan oras ng kawalan ng aktibidad at maglapat ng mga pagbabago sa configuration nang may pinakamababang posibleng epekto.

Sa magsimula ng serbisyo na dapat ay aktibo (halimbawa, Apache), ang karaniwang utos ay:

sudo systemctl start apache2

Kung tumatakbo na ang Apache, wala kang mapapansing kakaiba; kung ito ay itinigil, sisimulan ng daemon ang mga child process at sisimulang humawak ng mga request. Sa tuwing hindi ka sigurado sa nangyari, patakbuhin ang mga sumusunod na command:

sudo systemctl status apache2

Kapag binago mo ang pangunahing configuration file o ilan virtual host, karaniwan mong i-reload o pag-reboot Ang serbisyo. Mas maayos ang pag-recharge:

sudo systemctl reload apache2

Nagbibigay-daan ito sa serbisyo na basahin muli ang mga configuration file nang hindi pinapatay ang mga tumatakbong proseso, kaya halos walang mapansin ang mga user. Kung, sa anumang kadahilanan, hindi sinusuportahan ng serbisyo ang pag-reload, kakailanganin mong:

sudo systemctl restart apache2

Sa ilang mga kaso, kung ang serbisyo ay nagkakaproblema o naging hindi tumutugon, maaaring kailanganin ang isang kumpletong pag-reboot. nagpapalaya ng mga mapagkukunan at naglilinis ng mga proseso ng zombieIsa ito sa mga karaniwang hakbang sa pagsusuri bago ito suriin. mga tala sa malalim.

Sa pansamantalang ihinto ang isang serbisyo dahil gumagawa ka ng maintenance o dahil hindi mo lang ito kailangan nang pansamantala:

sudo systemctl stop apache2

Hindi nito mapipigilan ang pag-restart nito sa susunod na pag-reboot kung pinagana mo ito. Kung gusto mong tuluyan itong mawala hanggang sa susunod na abiso, pagsamahin mo ang stop sa huwag paganahin ang maskara depende sa antas ng "pagbabawal" na gusto mong ilapat.

Pagkatapos ng anumang sensitibong operasyon, lubos na inirerekomenda suriin ang katayuan ng serbisyo at ang mga pinakabagong talaan nito kasama ang:

sudo systemctl status nombre_servicio

At, kung kailangan mo ng higit pang konteksto, kasama ang journalctl, halimbawa:

sudo journalctl -u nombre_servicio

Pag-troubleshoot ng mga karaniwang problema gamit ang systemctl

Kapag may nangyaring mali kapag nagsisimula ng serbisyo gamit ang systemctlNormal lang na makakita ng mga mensahe tulad ng "Nabigo ang trabaho para sa X" o mga status Nabigo ang sa labasan ng status. Ang maayos na paraan upang magpatuloy ay karaniwang:

1. Tingnan ang detalyadong katayuan ng yunit:

sudo systemctl status nombre_servicio

Doon mo makikita kung hindi nagsisimula ang serbisyo dahil sa pagkabigo ng command, timeout, mga isyu sa pahintulot, nawawalang file, atbp. Tingnan ang mga linya tulad ng "Main PID exited" at ang mga aktwal na mensahe ng error mula sa application.

2. Suriin ang kumpletong mga talaan gamit ang journalctl:

sudo journalctl -u nombre_servicio

Ibibigay nito sa iyo ang kasaysayan ng log na nabuo ng unit, na lubhang kapaki-pakinabang kung ang serbisyo ay "mamatay" pagkatapos magsimula.

3. Suriin kung naka-enable ito kapag inaasahan mong mag-boot ito:

sudo systemctl is-enabled nombre_servicio

Kung lumalabas itong may kapansanan, gawin lamang ang mga sumusunod:

sudo systemctl enable nombre_servicio

4. Suriin ang mga pahintulot at gumagamitAng ilang serbisyo ay kailangang tumakbo bilang isang partikular na user o mag-access sa mga partikular na path. Kung ang unit file ay tumutukoy ng isang User= o Group= mali, o ang ruta sa ExecStart= Kung hindi ito umiiral o hindi maa-access, maaaring agad na tumigil ang serbisyo.

5. Kung manu-mano mong inedit ang drive file, laging tandaan i-reload ang configuration ng systemd na may:

sudo systemctl daemon-reload

Ang paglimot sa hakbang na ito ay isang klasikong pagkakamali: gagawa ka ng mga pagbabago, i-restart ang serbisyo, at makikita mo pa rin ang lumang pag-uugali dahil hindi pa nababasa ng systemd ang bagong file.

Ang pagpapanatili ng ganitong rutina ng mga pagsusuri at pana-panahong pagsusuri sa katayuan ng mga pangunahing yunit ay ginagawang mas madali ito. Pagpapanatili ng isang matatag at mahuhulaang sistema ng Linux.

Tulad ng nakikita mo Ang systemctl ay nagiging Swiss Army knife para sa pamamahala ng mga serbisyo, yunit, at estado ng sistema Sa anumang modernong distribusyon na may systemd, pinapayagan ka nitong simulan at ihinto ang mga daemon nang may katumpakan, kontrolin kung ano ang nagsisimula sa boot, siyasatin ang mga bug nang detalyado, ayusin ang mga configuration nang hindi pinapatungan ang mga system file, at lumipat mula sa graphical mode patungo sa rescue mode sa loob ng ilang segundo. Ang pagiging dalubhasa sa mga utos na ito ay hindi lamang ginagawang mas madali ang pamamahala ng mga Linux server o desktop, kundi nagbibigay din sa iyo ng higit na kumpiyansa kapag nag-troubleshoot ng mga seryosong problema sa produksyon, dahil alam mo nang eksakto kung ano ang tumatakbo, bakit, at kung paano ito ligtas na ihinto o baguhin.

pamahalaan ang mga serbisyo sa systemd
Kaugnay na artikulo:
Pamamahala ng Mga Serbisyo sa Systemd: Ang Kumpletong Gabay sa Systemctl