به منظور مشاهده وضعیت سرویس‌ها در سیستم عامل‌های لینوکس، از دستور systemctl status تحت systemd استفاده می‌شود. نحوه استفاده از این دستور در ادامه شرح داده شده است.

ساختار دستور systemctl برای مشاهده وضعیت سرویس به شرح زیر است:

systemctl status {service-name}
systemctl status {unit-name}

به عنوان مثال دستورات زیر را می‌توان برای مشاهده وضعیت سرویس nginx ،sshd و lighttpd استفاده کرد.

systemctl status nginx.service
## ssh server status ##
systemctl status sshd.service
## Lighttpd web server status ##
systemctl status lighttpd.service
● lighttpd.service - Lighttpd Daemon
     Loaded: loaded (/lib/systemd/system/lighttpd.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2020-08-04 04:29:19 UTC; 3 weeks 2 days ago
   Main PID: 105 (lighttpd)
      Tasks: 1 (limit: 115783)
     Memory: 56.5M
     CGroup: /system.slice/lighttpd.service
             └─۱۰۵ /usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf

Aug 04 04:29:19 utls-bash-wiki systemd[1]: Starting Lighttpd Daemon...
Aug 04 04:29:19 utls-bash-wiki systemd[1]: Started Lighttpd Daemon.

در خروجی ممکن است کاراکتر نقطه (“●”) با یکی از سه رنگ‌های سفید، قرمز و سبز نمایش داده شود. رنگ سفید وضعیت “inactive” یا “deactivating” را نشان می‌دهد. رنگ قرمز وضعیت “failed” یا “error” را نشان می‌دهد. رنگ سبز حالت “active”، “reloading” یا “activating” را نشان می‌دهد.

 

 

درک وضعیت سرویس‌ها و unitهای systemd

وضعیت سرویس‌های لینوکس می‌تواند حالت‌های مختلف زیر را شامل باشد:

active (running): سرویس یا daemon در پس زمینه در حال اجرا است. به عنوان مثال، وب سرور sshd یا nginx و apache و لیست ترافیک ورودی.

active (exited): سرویس با موفقیت از روی فایل پیکربندی راه‌اندازی شده است. فایل پیکربندی سرویس‌ها معمولاً یک مرتبه قبل از خروج از سرویس خوانده می‌شود. به عنوان مثال، سرویس AppArmor یا Firewall.

active (waiting): سرویس در حال اجرا است؛ اما منتظر رویدادی مانند رویداد چاپ یا CPUS است.

inactive: سرویس در حال اجرا نیست.

enabled: سرویس در زمان راه‌اندازی فعال است.

disabled: سرویس غیرفعال است و در زمان راه‌اندازی سرور لینوکس، فعال نمی‌شود.

static: سرویس را نمی‌توان در لینوکس فعال کرد، اما بیشتر توسط systemd unit دیگری به طور خودکار راه‌اندازی می‌شود. به عبارت دیگر، فایل unit فعال نیست و در بخش [install] فایل unit هیچگونه مجوزی ندارد.

masked: سرویس کاملاً غیرفعال است و تمام عملیات‌های راه‌اندازی آن همیشه با شکست مواجه می‌شود.

alias: نام سرویس، یک نام مستعار است. بدین معنی که سرویس، به یک فایل unit دیگر لینک داده شده است.

linked: از طریق یک یا چند لینک به فایل unit (به طور دائم در مسیر etc/systemd/system یا گذرا در مسیر run/systemd/system) در دسترس است؛ حتی اگر فایل unit خارج از مسیر جستجوی فایل unit باشد.

 

unitهای پشتیبانی شده توسط systemd

service: پیکربندی unit سرویس، درباره فرآیندی که توسط systemd کنترل و نظارت می‌شود.

mount: موقعیت mount سیستم فایلی که توسط systemd کنترل و نظارت می‌شود.

swap: پیکربندی فایل و دیسک Swap که توسط systemd کنترل می‌شود.

socket: یک سوکت IPC یا شبکه یا یک سیستم فایل FIFO که توسط systemd کنترل و نظارت می‌شود (برای فعال سازی مبتنی بر سوکت).

target: شامل اطلاعات مربوط به یک واحد هدف systemd است. target، برای گروه بندی unitها و به عنوان نقاط مشهور هماهنگ سازی در هنگام راه‌اندازی استفاده می‌شود. به عنوان مثال، graphical.target به منظور ورود به سیستم دسک‌تاپ مبتنی بر GUI استفاده می‌شود. به همین ترتیب، multi-user.target توسط سرورهایی استفاده می‌شود که در آن، کاربران می‌توانند با استفاده از ssh / console وارد سیستم شوند.

device: یک unit دستگاهی است که در درخت دستگاه sysfs / udev قرار گرفته است. device شامل شبکه و سایر دستگاه‌ها است.

Automount: سیستم‌های فایل Automount است.

Timer: واحدی است که برای اجرای دستورات و سرویس‌ها در یک قالب تاریخ و زمان مشخص استفاده می‌شود. به عنوان مثال، رفرش کردن firmware، یا پاک کردن session ایجاد شده توسط برنامه‌های وب تحت Python یا PHP.

Path: یک واحد target خاص systemd است که همه unitهای path را تنظیم می‌کند. به عنوان مثال، systemd می‌تواند واکنش خاصی را بسته به مسیر فایل سیستم داشته باشد و یا در صورت تغییر /etc/foo/ اقداماتی انجام دهد.

Slice: به منظور جدا کردن بارهای کاری از system slice استفاده می‌شود. آن‌ها سلسله مراتبی را تعریف می‌کنند که دامنه‌ها و سرویس‌ها در آن‌ها قرار می‌گیرند. فرآیندهای واقعی در دامنه‌ها یا سرویس‌ها قرار دارند. بنابراین آن را می‌توان به عنوان یک داکر سبک وزن در نظر گرفت. برای هر slice، محدودیت‌های منابع خاصی مانند CPU یا محدودیت ورودی / خروجی دیسک ممکن است تعیین شود که برای همه پردازش‌ها اعمال می‌شود.

scope: واحدهای scope از طریق فایل‌های پیکربندی unitها پیکربندی نمی‌شوند، بلکه تنها به صورت برنامه نویسی با استفاده از رابط‌های گذرگاه systemd ایجاد می‌شوند. نام آن‌ها مشابه نام فایل‌ها است. unitای که نام آن به “.scope” ختم می‌شود به یک واحد scope اشاره دارد. unitهای Scope مجموعه‌ای از فرایندهای سیستم را مدیریت می‌نمایند. برخلاف unitهای سرویس، unitهای scope فرآیندهای ایجاد شده در خارج را مدیریت کرده و خودشان به تنهایی فرآیندها را خاموش نمی‌کنند. هدف اصلی unitهای scope، گروه بندی فرآیندهای workerهای یک سرویس سیستم برای سازمان و مدیریت منابع است.

 

 

همه واحدهای service را می‌توان به صورت زیر لیست کرد:

sudo systemctl --type=service

واحد mount را نیز می‌توان با دستور زیر مشاهده نمود:

sudo systemctl --type=mount

تمام واحدهای timer با استفاده از دستور زیر نمایش داده می‌شود:

sudo systemctl -t timer
  UNIT                         LOAD   ACTIVE SUB     DESCRIPTION     
____________________________________________________________________________________________________________                                       
  anacron.timer                loaded active waiting Trigger anacron every hour                             
  apt-daily-upgrade.timer      loaded active waiting Daily apt upgrade and clean activities                 
  apt-daily.timer              loaded active waiting Daily apt download activities                          
  e2scrub_all.timer            loaded active waiting Periodic ext4 Online Metadata Check for All Filesystems
  fstrim.timer                 loaded active waiting Discard unused blocks once a week                      
  fwupd-refresh.timer          loaded active waiting Refresh fwupd metadata regularly                       
  logrotate.timer              loaded active waiting Daily rotation of log files                            
  man-db.timer                 loaded active waiting Daily man-db regeneration                              
  mdcheck_start.timer          loaded active waiting MD array scrubbing                                     
  mdmonitor-oneshot.timer      loaded active waiting Reminder for degraded MD arrays                        
  motd-news.timer              loaded active waiting Message of the Day                                     
  phpsessionclean.timer        loaded active waiting Clean PHP session files every 30 mins                  
  systemd-tmpfiles-clean.timer loaded active waiting Daily Cleanup of Temporary Directories                 

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

۱۳ loaded units listed. Pass --all to see loaded but inactive units, too.

برای نمایش همه فایل‌های unit نصب شده می‌توانید، دستور زیر را وارد کنید:

sudo systemctl list-unit-files

 

برای مشاهده وضعیت همه سرویس‌ها و unitها در سیستم لینوکس (از زمان بالا آمدن سیستم)، دستور زیر را تایپ نمایید:

sudo systemctl

به منظور فیلتر کردن unitها و سرویس‌های مورد نیاز می‌توانید، از دستور grepیا  egrep استفاده کنید:

sudo systemctl | grep ssh
sudo systemctl | egrep 'apache|nginx|lighttpd|php'

برای نمایش واحدهایی که systemd در حال حاضر آن‌ها را در حافظه دارند، کافیست دستور زیر را اجرا نمایید:

sudo systemctl list-units
sudo systemctl list-units | more
sudo systemctl list-units | grep sshd
## filter by unit types ##
sudo systemctl list-units --type service
sudo systemctl list-units --type timer

با اجرای دستور زیر systemd یا systemctl تمام unitها و سرویس‌های ناموفق را در لینوکس لیست می‌کند.

sudo systemctl list-units --failed
sudo systemctl list-units --state failed
## filtering by unit type ##
sudo systemctl list-units --state failed --type service
sudo systemctl list-units --state failed --type timer

 

چنانچه سرور مورد نظر شما در حال اجرا نبود، می‌توانید از دستورات زیر برای راه‌اندازی آن استفاده نمایید.

به عنوان مثال اگر سرویس nginx در حال اجرا نبود:

با استفاده از دستور زیر، این سرویس systemd روشن می‌شود:

sudo systemctl enable nginx.service

و با اجرای دستور زیر، سرویس راه‌اندازی می‌شود:

sudo systemctl start nginx.service

شما می‌توانید سرویس را به صورت زیر متوقف و یا مجدداً راه‌اندازی کنید:

sudo systemctl stop nginx.service
sudo systemctl restart nginx.service

حتی می‌توانید با اجرای دستور زیر، بررسی کنید که آیا سرویس فعال است یا خیر:

sudo systemctl is-enabled nginx.service

و دوباره وضعیت را مشاهده نمایید:

sudo systemctl status nginx.service

 

 

دقت کنید که برای مشاهده خروجی کامل به منظور دیباگ کردن مشکلات سرویس‌ها، گزینه –full یا -l را به انتهای دستور اضافه کنید:

sudo systemctl status nginx.service -l
sudo systemctl status openvpn.service --full

علاوه‌براین، با استفاده از دستور journalctl می‌توانید، تمام پیام‌های گزارش مربوط به سرویس را دیباگ و مشاهده نمایید:

sudo journalctl UNIT=nginx.service
Aug 02 03:51:05 utls-wp-mg-www-cbz systemd[1]: Stopped A high performance web server and a reverse proxy server.
Aug 02 03:51:15 utls-wp-mg-www-cbz systemd[1]: Starting A high performance web server and a reverse proxy server...
Aug 02 03:51:15 utls-wp-mg-www-cbz systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
Aug 02 03:51:15 utls-wp-mg-www-cbz systemd[1]: nginx.service: Failed with result 'exit-code'.
Aug 02 03:51:15 utls-wp-mg-www-cbz systemd[1]: Failed to start A high performance web server and a reverse proxy server.
Aug 02 03:51:48 utls-wp-mg-www-cbz systemd[1]: Starting A high performance web server and a reverse proxy server...
Aug 02 03:51:48 utls-wp-mg-www-cbz systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
Aug 02 03:51:48 utls-wp-mg-www-cbz systemd[1]: nginx.service: Failed with result 'exit-code'.
Aug 02 03:51:48 utls-wp-mg-www-cbz systemd[1]: Failed to start A high performance web server and a reverse proxy server.
Aug 02 03:52:07 utls-wp-mg-www-cbz systemd[1]: Starting A high performance web server and a reverse proxy server...
Aug 02 03:52:07 utls-wp-mg-www-cbz systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
Aug 02 03:52:07 utls-wp-mg-www-cbz systemd[1]: nginx.service: Failed with result 'exit-code'.
Aug 02 03:52:07 utls-wp-mg-www-cbz systemd[1]: Failed to start A high performance web server and a reverse proxy server.
Aug 02 03:53:05 utls-wp-mg-www-cbz systemd[1]: Starting A high performance web server and a reverse proxy server...
Aug 02 03:53:05 utls-wp-mg-www-cbz systemd[1]: Started A high performance web server and a reverse proxy server.
Aug 04 04:11:47 utls-wp-mg-www-cbz systemd[1]: Stopping A high performance web server and a reverse proxy server...
Aug 04 04:11:48 utls-wp-mg-www-cbz systemd[1]: nginx.service: Succeeded.
Aug 04 04:11:48 utls-wp-mg-www-cbz systemd[1]: Stopped A high performance web server and a reverse proxy server.
-- Reboot --
Aug 04 04:27:35 utls-wp-mg-www-cbz systemd[1]: Starting A high performance web server and a reverse proxy server...
Aug 04 04:27:35 utls-wp-mg-www-cbz systemd[1]: Started A high performance web server and a reverse proxy server.

 

به منظور مشاهده منبع فایل سرویس و واحدهای systemd می‌توانید، گزینه cat را به صورت زیر، به دستور systemctl اضافه نمایید:

sudo systemctl cat {service-name}
sudo systemctl cat nginx.service
 /lib/systemd/system/nginx.service
# Stop dance for nginx
# =======================
#
# ExecStop sends SIGSTOP (graceful stop) to the nginx process.
# If, after 5s (--retry QUIT/5) nginx is still running, systemd takes control
# and sends SIGTERM (fast shutdown) to the main process.
# After another 5s (TimeoutStopSec=5), and if nginx is alive, systemd sends
# SIGKILL to all the remaining processes in the process group (KillMode=mixed).
#
# nginx signals reference doc:
# http://nginx.org/en/docs/control.html
#
[Unit]
Description=A high performance web server and a reverse proxy server
Documentation=man:nginx(8)
After=network.target
 
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed
 
[Install]
WantedBy=multi-user.target

 

چنانچه اطلاعات بیشتری را در مورد دستور systemctl و لیست کردن واحدها و سرویس‌های systemd می‌خواهید، داکومنت مربوط به Systemctl را مشاهده کنید یا از دستور man و –help به صورت زیر استفاده نمایید:

man systemctl
systemctl --help

 

 

 

منبع:

cyberciti