EQVPS
Anza

Jinsi ya kuunda huduma ya systemd ili programu iendelee kufanya kazi

Geuza skripti au programu yoyote kuwa huduma inayosimamiwa inayoanza wakati wa kuwasha, huanza upya ikianguka, na kuandika kumbukumbu kwenye journalctl. Andika faili ya unit, iwezeshe, na kagua hali yake — njia ya kawaida ya kuendesha kitu 24/7 kwenye Linux.

Kuendesha programu kwa & au nohup ni sawa hadi seva iwashwe upya, mchakato uanguke, au utake kupata kumbukumbu zake — ndipo kila kitu kinapoporomoka. systemd ndiyo jibu la kawaida: huanzisha programu yako wakati wa kuwasha, huianzisha upya ikifa, na hunasa kumbukumbu zake. Kugeuza skripti au binari kuwa huduma inayosimamiwa ni faili moja ndogo.

1. Andika faili ya unit

Unda /etc/systemd/system/myapp.service:

[Unit]
Description=My application
After=network.target

[Service]
User=myapp
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/python3 /opt/myapp/run.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Rekebisha ExecStart, WorkingDirectory na User kulingana na programu yako. Restart=always ndicho kinachoiweka hai.

2. Unda mtumiaji maalum (inapendekezwa)

sudo useradd --system --no-create-home --shell /usr/sbin/nologin myapp
sudo chown -R myapp:myapp /opt/myapp

Kuendesha kama mtumiaji asiye root hupunguza uharibifu ikiwa programu itavunjwa siku moja.

3. Iwezeshe na uianzishe

sudo systemctl daemon-reload
sudo systemctl enable --now myapp

enable huifanya ianze wakati wa kuwasha; --now huianzisha mara moja.

4. Kagua hali na kumbukumbu

sudo systemctl status myapp
journalctl -u myapp -f       # fuatilia kumbukumbu za moja kwa moja

Amri za kila siku

sudo systemctl restart myapp   # anzisha upya baada ya mabadiliko
sudo systemctl stop myapp      # isimamishe
sudo systemctl disable myapp   # acha kuanza wakati wa kuwasha

Maonyo ya kweli

Hatua zinazofuata

Huduma ya systemd ndiyo jinsi unavyoweka chochote kikiendelea kufanya kazi 24/7 — kwa mfano wakala wa AI unaofanya kazi mchana na usiku au relei nyuma ya seva ya RustDesk inayojiendesha. Ikiwa programu yako imewekwa katika kontena badala yake, --restart unless-stopped ya Docker hucheza nafasi ileile — ona jinsi ya kusakinisha Docker.

Maswali

Kwa nini kutumia systemd badala ya kuendesha tu programu nyuma?

Mchakato wa nyuma (kwa & au nohup) hufa wakati wa kuwasha upya, haurudi ukianguka, na hutawanya kumbukumbu zake. Huduma ya systemd huanza kiotomatiki wakati wa kuwasha, huanza upya ikishindwa, na hutuma matokeo yake kwenye journalctl. Ni njia ya kawaida, ya kuaminika ya kuendesha kitu cha muda mrefu kwenye Linux.

Faili za unit huwekwa wapi?

Huduma zako mwenyewe huwekwa katika /etc/systemd/system/, faili moja kwa kila huduma, iliyopewa jina kama kitu.service. Baada ya kuunda au kuhariri moja, endesha 'systemctl daemon-reload' ili systemd ichukue mabadiliko, kisha iwezeshe na uianzishe.

'Restart=always' hufanya nini, na je, kuna hasara?

Huambia systemd kuanzisha upya huduma kila inapotoka, kwa sababu yoyote — ufunguo wa kuendeleza kitu kifanye kazi. Mtego pekee ni kitanzi cha kuanguka: ikiwa programu inashindwa mara moja inapoanza, systemd huendelea kuianzisha upya. Ongeza 'RestartSec=5' kupanua nafasi kati ya majaribio, na kagua kumbukumbu ili kurekebisha kosa la msingi.

Naonaje kumbukumbu za huduma?

Tumia 'journalctl -u yourservice -f' kufuatilia matokeo ya moja kwa moja, au bila -f kusoma historia. systemd hunasa stdout na stderr kiotomatiki, hivyo huhitaji kuunganisha faili za kumbukumbu mwenyewe.

Je, huduma iendeshwe kama root?

Ni bora isiwe hivyo. Unda mtumiaji maalum asiye root na weka 'User=' katika unit, ili kuvunjwa kwa programu kusikabidhi mashine nzima. Endesha kama root tu wakati huduma inapohitaji kweli.

Maoni

Bado hakuna maoni. Kuwa wa kwanza.

Acha maoni

Maoni yanakaguliwa kabla ya kuonekana.