−25%

Windows-ის წლიურ გადახდაზე, 31 ოქტომბრამდე. ტარიფებზე

EQVPS
დაწყება

როგორ შევქმნათ systemd სერვისი აპლიკაციის მუშაობის შესანარჩუნებლად

აქციეთ ნებისმიერი სკრიპტი ან აპლიკაცია მართულ სერვისად, რომელიც ეშვება ჩატვირთვისას, ხელახლა ეშვება თუ ავარიულად გამოირთვება და აწერს ლოგებს journalctl-ში. დაწერეთ unit ფაილი, ჩართეთ იგი და შეამოწმეთ მისი სტატუსი — სტანდარტული გზა Linux-ზე რაიმეს 24/7 გასაშვებად.

აპლიკაციის გაშვება &-ით ან nohup-ით კარგადაა, სანამ სერვერი არ გადაიტვირთება, პროცესი არ ავარიულ­დება ან თქვენ არ მოინდომებთ მისი ლოგების პოვნას — მაშინ ის იშლება. systemd სტანდარტული პასუხია: ის უშვებს თქვენს აპლიკაციას ჩატვირთვისას, ხელახლა უშვებს თუ ის მოკვდება და იჭერს მის ლოგებს. სკრიპტის ან ბინარის მართულ სერვისად ქცევა ერთი პატარა ფაილია.

1. დაწერეთ unit ფაილი

შექმენით /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

მოარგეთ ExecStart, WorkingDirectory და User თქვენს აპლიკაციას. Restart=always არის ის, რაც მას ცოცხლად ინახავს.

2. შექმენით გამოყოფილი მომხმარებელი (რეკომენდებულია)

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

არა-root მომხმარებლად გაშვება ზღუდავს ზიანს, თუ აპლიკაცია ოდესმე კომპრომეტირდება.

3. ჩართეთ იგი და გაუშვით

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

enable აიძულებს მას გაეშვას ჩატვირთვისას; --now მას მყისვე უშვებს.

4. შეამოწმეთ სტატუსი და ლოგები

sudo systemctl status myapp
journalctl -u myapp -f       # ცოცხალი ლოგების თვალყურისდევნება

ყოველდღიური ბრძანებები

sudo systemctl restart myapp   # გადატვირთვა ცვლილების შემდეგ
sudo systemctl stop myapp      # მისი გაჩერება
sudo systemctl disable myapp   # ჩატვირთვისას გაშვების შეწყვეტა

გულწრფელი გაფრთხილებები

  • გაუშვით daemon-reload unit ფაილის რედაქტირების შემდეგ, თორემ systemd იყენებს ძველ ვერსიას.
  • ფრთხილად ავარიის მარყუჟებთან. თუ აპლიკაცია მყისვე ვერ ხერხდება, Restart=always სამუდამოდ ცდის — RestartSec=5 აშორებს მცდელობებს; გამოასწორეთ ძირეული შეცდომა ლოგების მეშვეობით.
  • უპირატესობა მიანიჭეთ არა-root User=-ს, რომ კომპრომეტირებული აპლიკაცია მთელ სერვერს არ ფლობდეს.

შემდეგი ნაბიჯები

systemd სერვისი არის ის, როგორ ინახავთ ნებისმიერ რამეს გაშვებულს 24/7 — მაგალითად AI აგენტი, რომელიც მუშაობს დღე და ღამე ან რელე თვითჰოსტინგის RustDesk სერვერის უკან. თუ თქვენი აპლიკაცია სამაგიეროდ კონტეინერიზებულია, Docker-ის --restart unless-stopped ასრულებს იმავე როლს — იხ. როგორ დავაინსტალიროთ Docker.

ხდკ

რატომ systemd და არა უბრალოდ აპლიკაციის ფონურად გაშვება?

ფონური პროცესი (& ან nohup-ით) კვდება გადატვირთვისას, არ ბრუნდება თუ ავარიულად გამოირთვება და ფანტავს თავის ლოგებს. systemd სერვისი ავტომატურად ეშვება ჩატვირთვისას, ხელახლა ეშვება წარუმატებლობისას და აგზავნის თავის გამონატანს journalctl-ში. ეს არის სტანდარტული, საიმედო გზა Linux-ზე ხანგრძლივი რამის გასაშვებად.

სად თავსდება unit ფაილები?

თქვენი საკუთარი სერვისები თავსდება /etc/systemd/system/-ში, თითო ფაილი თითო სერვისზე, სახელით რაღაც.service. შექმნის ან რედაქტირების შემდეგ გაუშვით 'systemctl daemon-reload', რომ systemd-მ აიღოს ცვლილება, შემდეგ ჩართეთ და გაუშვით.

რას აკეთებს 'Restart=always' და აქვს თუ არა უარყოფითი მხარეები?

ის ეუბნება systemd-ს, გადატვირთოს სერვისი ყოველ ჯერზე, როცა ის გამოვა, ნებისმიერი მიზეზით — გასაღები რაიმეს მუშაობის შესანარჩუნებლად. ერთადერთი ხაფანგი ავარიის მარყუჟია: თუ აპლიკაცია გაშვებისთანავე მყისვე ვერ ხერხდება, systemd განუწყვეტლივ ხელახლა უშვებს. დაამატეთ 'RestartSec=5' მცდელობების დასაშორებლად და შეამოწმეთ ლოგები ძირეული შეცდომის გამოსასწორებლად.

როგორ ვნახო სერვისის ლოგები?

გამოიყენეთ 'journalctl -u yourservice -f' ცოცხალი გამონატანის თვალყურისდევნებისთვის, ან -f-ის გარეშე ისტორიის წასაკითხად. systemd იჭერს stdout-სა და stderr-ს ავტომატურად, ამიტომ ლოგ-ფაილების თავად მიერთება არ გჭირდებათ.

უნდა გაეშვას თუ არა სერვისი root-ით?

სასურველია არა. შექმენით გამოყოფილი არა-root მომხმარებელი და დააყენეთ 'User=' unit-ში, რომ აპლიკაციის კომპრომეტირებამ მთელი მანქანა არ გადასცეს. გაუშვით root-ით მხოლოდ მაშინ, როცა სერვისს ეს ნამდვილად სჭირდება.

კომენტარები

ჯერ არ არის კომენტარები. იყავით პირველი.

დატოვეთ კომენტარი

კომენტარები მოდერირდება გამოჩენამდე.