Systemd come controllare che un servizio sia in esecuzione in linux

Oramai praticamente tutte le nuove release delle distribuzioni Linux hanno abbandonando il denome init ( SystemV init o SysV init  ) per passare al demone systemd come controllore dei servizi e del sistema.

Uno dei principali vantaggi di systemd è la capacità di avviare i processi in parallelo (aggressive parallelization capabilities). Con init infatti i processi vengono avviati in modo seriale e un task può essere avviato solo quando il precedente si è concluso correttamente.  Come per avviene per init systemd è il primo processo che sia avvia ed è il padre di tutti i processi nati dopo successivamente, tipicamente ha assegnato pid=1.

A differenza di SysV init,  systemd init è responsabile del mount point, della crittografia, di syslog, etc  superando così le funzionalità di un init system di base. La gran parte delle azioni di systemd si svolge agendo su risorse denominate  “units”. Le units sono definite da files noti come unit files. Il tipo di unit files è in genere riconoscibile a partire dall’estensione del file. Conseguentemente lo unit file di un servizio avrà l’estensione .service: il servizio di dbase postgresql  avrà come target uno unit files del tipo postgresql.service.

Il comando utilizzato per controllare systemd è systemctl.

Conseguentemente la situazione abbastanza frequente di verificare che un servizio o demone  (service o daemon)  sia in esecuzione ad esempio: apache ,mysqld, postrgresql, samba, ssh, nfs, rsync, cron, syslogd, etc. in un sistema Linux con systemd init sarà diversa da quella con SysV init.

Controllare che un servizio sia attivo: comparazione tra SysV init e systemd init

SysV init

per controllare che il servizio postgresql sia in esecuzione con SysV init utilizziamo il comando

service nome-del-servizio status
per postgresql
service postgresql status

ubuntu  12

$ service postgresql status
9.1/main (port 5432): online

per dettagli sul controllo dello stato di un servizio in SysV init fare riferimento al post:

Come controllare che un servizio (service) sia in esecuzione in linux  

Systemd init

per controllare che un servizio con systemd  sia in esecuzione è necessario conoscere lo unit file di riferimento e utilizzare il comando systemctl

systemctl status nome-unit-file.estensione
per postgresql 
systemctl status postgresql@9.6-main.service

debian 9

# systemctl status postgresql@9.6-main.service
 postgresql@9.6-main.service - PostgreSQL Cluster 9.6-main
   Loaded: loaded (/lib/systemd/system/postgresql@.service; disabled; vendor preset: enabled)
   Active: active (running) since Sat 2018-04-28 16:23:29 CEST; 4min 36s ago
  Process: 19786 ExecStop=/usr/bin/pg_ctlcluster --skip-systemctl-redirect -m fast 9.6-main stop (code=exited, status=0/SUCCESS)
  Process: 19792 ExecStart=postgresql@9.6-main --skip-systemctl-redirect 9.6-main start (code=exited, status=0/SUCCESS)
 Main PID: 19799 (postgres)
    Tasks: 6 (limit: 4915)
   CGroup: /system.slice/system-postgresql.slice/postgresql@9.6-main.service
           ├─19799 /usr/lib/postgresql/9.6/bin/postgres -D /var/lib/postgresql/9.6/main -c config_file=/etc/postgresql/9.6/main/postgresql.conf
           ├─19801 postgres: 9.6/main: checkpointer process   
           ├─19802 postgres: 9.6/main: writer process   
           ├─19803 postgres: 9.6/main: wal writer process   
           ├─19804 postgres: 9.6/main: autovacuum launcher process   
           └─19805 postgres: 9.6/main: stats collector process   

Apr 28 16:23:27 deb9 systemd[1]: Starting PostgreSQL Cluster 9.6-main...
Apr 28 16:23:29 deb9 systemd[1]: Started PostgreSQL Cluster 9.6-main.

come si può osservare l’outup è decisamente più articolato di sysV.

Unit file 

Per visualizzare il contenuto dello unit file responsabile dell’avvio del servizio postgresql si può utilizzare il comando: systemctl cat nome-unit

systemctl cat postgresql@9.6-main.service

# /lib/systemd/system/postgresql@.service
# systemd service template for PostgreSQL clusters. The actual instances will
# be called "postgresql@version-cluster", e.g. "postgresql@9.3-main". The
# variable %i expands to "version-cluster", %I expands to "version/cluster".
# (%I breaks for cluster names containing dashes.)

[Unit]
Description=PostgreSQL Cluster %i
ConditionPathExists=/etc/postgresql/%I/postgresql.conf
PartOf=postgresql.service
ReloadPropagatedFrom=postgresql.service
Before=postgresql.service

[Service]
Type=forking
# @: use "postgresql@%i" as process name
ExecStart=@/usr/bin/pg_ctlcluster postgresql@%i --skip-systemctl-redirect %i start
ExecStop=/usr/bin/pg_ctlcluster --skip-systemctl-redirect -m fast %i stop
ExecReload=/usr/bin/pg_ctlcluster --skip-systemctl-redirect %i reload
PIDFile=/var/run/postgresql/%i.pid
SyslogIdentifier=postgresql@%i
# prevent OOM killer from choosing the postmaster (individual backends will
# reset the score to 0)
OOMScoreAdjust=-900
# restarting automatically will prevent "pg_ctlcluster ... stop" from working,
# so we disable it here. Also, the postmaster will restart by itself on most
# problems anyway, so it is questionable if one wants to enable external
# automatic restarts.
#Restart=on-failure
# (This should make pg_ctlcluster stop work, but doesn't:)
#RestartPreventExitStatus=SIGINT SIGTERM

[Install]
WantedBy=multi-user.target

Visualizzare le dipendenze di una unit

In systemd init è possibile visualizzare anche tutte le dipendenze di un servizio quale postgresql con il comando systemctl list-dependecies postgresql@96-main.service.

systemctl cat systemctl list-dependencies  postgresql@9.6-main.service
postgresql@9.6-main.service
 ├─system-postgresql.slice
 └─sysinit.target
●   ├─apparmor.service
   ├─dev-hugepages.mount
   ├─dev-mqueue.mount
●   ├─keyboard-setup.service
   ├─kmod-static-nodes.service
   ├─lvm2-lvmetad.socket
   ├─lvm2-lvmpolld.socket
   ├─lvm2-monitor.service
   ├─proc-sys-fs-binfmt_misc.automount
   ├─sys-fs-fuse-connections.mount
●   ├─sys-kernel-config.mount
   ├─sys-kernel-debug.mount
   ├─systemd-ask-password-console.path
●   ├─systemd-binfmt.service
●   ├─systemd-hwdb-update.service
   ├─systemd-journal-flush.service
   ├─systemd-journald.service
●   ├─systemd-machine-id-commit.service
   ├─systemd-modules-load.service
   ├─systemd-random-seed.service
   ├─systemd-sysctl.service
   ├─systemd-timesyncd.service
   ├─systemd-tmpfiles-setup-dev.service
   ├─systemd-tmpfiles-setup.service
   ├─systemd-udev-trigger.service
   ├─systemd-udevd.service
   ├─systemd-update-utmp.service
   ├─cryptsetup.target
   ├─local-fs.target
   │ ├─-.mount
   │ ├─media-ArchivioR.mount
   │ ├─media-Home_Dati.mount
●   │ ├─systemd-fsck-root.service
   │ └─systemd-remount-fs.service
   └─swap.target
     └─dev-sda15.swap

Verificare lo stato di tutti i servizi in systemd init – linux

SysV init

Per verificare lo stato di tutti i servizi presenti un sistema sysV init basta usare l’opzione –status-all

$ service --status-all

In pratica –status-all consente di vedere  i servizi installati.

systemd 

Come già affermato systemd gestisce un numero più elevato di funzionalità rispetto a sysV quindi la visualizzazione di tutte le unit diventa una schermata piuttosto estesa.

In questo caso conviene filtrare le units chiedendo di visualizzare sono le unit di tipo servizio. Per visualizzare tutte le units che systemd può gestire si usa il comando

# systemctl list-units

per restringere il campo a quelle di tipo service aggiungere l’opzione –type=service 

# systemctl list-units --type=service
systemctl list-units --type=service
  UNIT                                                                                      LOAD   ACTIVE SUB     DESCRIPTION                                                                  
  alsa-restore.service                                                                      loaded active exited  Save/Restore Sound Card State                                                
  avahi-daemon.service                                                                      loaded active running Avahi mDNS/DNS-SD Stack                                                      
  binfmt-support.service                                                                    loaded active exited  Enable support for additional executable binary formats                      
  colord.service                                                                            loaded active running Manage, Install and Generate Color Profiles                                  
  console-setup.service                                                                     loaded active exited  Set console font and keymap                                                  
  cron.service                                                                              loaded active running Regular background program processing daemon                                 
  cups-browsed.service                                                                      loaded active running Make remote CUPS printers available locally                                  
  cups.service                                                                              loaded active running CUPS Scheduler                                                               
  dbus.service                                                                              loaded active running D-Bus System Message Bus                                                     
  ebtables.service                                                                          loaded 
...                                                               loaded active exited  Set the console keyboard layout                                              
  kmod-static-nodes.service                                                                 loaded active exited  Create list of required static device nodes for the current kernel           
  libvirt-guests.service                                                                    loaded active exited  Suspend/Resume Running libvirt Guests                                        
  libvirtd.service                                                                          loaded active running Virtualization daemon                                                        
  lightdm.service                                                                           loaded active running Light Display Manager                                                        
...                                                                     loaded active exited  Raise                                                            
● nginx.service                                                                             loaded failed failed  A high performance web server and a reverse proxy server                     
  polkit.service                                                                            loaded active running Authorization Manager                                                        
  postgresql.service                                                                        loaded active exited  PostgreSQL RDBMS                                                             
  postgresql@9.6-main.service                                                               loaded active running PostgreSQL Cluster 9.6-main                                                  
  rpcbind.service
.....
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.

runlevel e System state

SysV init runlevel

In SysV init il modo più semplice per visualizzare i servizi attivi in un dato runlevel è digitare un comando del tipo:

sudo ls -l /etc/rc(num-run-level).d/

systemd init System state ( runlevel )

In systemd il concetto di runlevel è sostituito dal concetto di System State o punto di sincronizzazione.  Per definire un determinato System State vengono utilizzati degli unit file particolari con estensione .target.  Uno unit.target garantirà di avere disponibile tutti gli units che definiscono uno specifico System State senza doversi preoccupare dei singoli elementi. Se si utilizza lo unit sound.target questo starà ad indicare che servizi per l’audio sono pronti all’audio.

In systemd i System State sono più numerosi dei runlevel quelli comparabili con i runlevel possono essere elencati con il comando:

systemctl list-units --type=target
systemctl list-units --type=target
UNIT                       LOAD   ACTIVE SUB    DESCRIPTION              
basic.target               loaded active active Basic System             
cryptsetup.target          loaded active active Encrypted Volumes        
getty.target               loaded active active Login Prompts            
graphical.target           loaded active active Graphical Interface      
local-fs-pre.target        loaded active active Local File Systems (Pre) 
local-fs.target            loaded active active Local File Systems       
multi-user.target          loaded active active Multi-User System        
network-online.target      loaded active active Network is Online        
network-pre.target         loaded active active Network (Pre)            
network.target             loaded active active Network                  
paths.target               loaded active active Paths                    
remote-fs-pre.target       loaded active active Remote File Systems (Pre)
remote-fs.target           loaded active active Remote File Systems      
rpcbind.target             loaded active active RPC Port Mapper          
slices.target              loaded active active Slices                   
sockets.target             loaded active active Sockets                  
sound.target               loaded active active Sound Card               
swap.target                loaded active active Swap                     
sysinit.target             loaded active active System Initialization    
time-sync.target           loaded active active System Time Synchronized 
timers.target              loaded active active Timers                   
virt-guest-shutdown.target loaded active active Libvirt guests shutdown  

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.

22 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

Benchè il concetto di System State conseguito con gli unit.target sia decisamente più flessibile del concetto di runlevel è possibile evidenziare alcuni target che sono in relazione proprio i principali runlevel di SysV. A questo proposito si può precisare  sono diponibili anche unit  dal nome evocativo: 

systemctl list-units-files --type=target
UNIT FILE                  STATE              
...
runlevel0.target           disabled
runlevel1.target           disabled
runlevel2.target           static  
runlevel3.target           static  
runlevel4.target           static  
runlevel5.target           static  
runlevel6.target           disabled            
...
59 unit files listed.

Elencare i servizi abilitati in Systemctl

Per elencare tutti i servizi abilitati,  enabled,  si può far ricorso al solito greo

systemctl list-unit-files | grep enabled

es:

# systemctl list-unit-files | grep enabled
acpid.path                                                             enabled  
cups.path                                                              enabled  
apache2.service                                                        enabled  
atd.service                                                            enabled  
autovt@.service                                                        enabled  
avahi-daemon.service                                                   enabled  
clamav-freshclam.service                                               enabled  
console-setup.service                                                  enabled  
cron.service                                                           enabled         
...
...

per elencare i servizi in esecuzioni utilizzare il filtro running

systemctl  | grep running

es:

# systemctl | grep running
  proc-sys-fs-binfmt_misc.automount              loaded active running   Arbitrary Executable File Formats File System Automount Point                              
  acpid.path                                     loaded active running   ACPI Events Check                                                                          
  cups.path                                      loaded active running   CUPS Scheduler                                                                             
  init.scope                                     loaded active running   System and Service Manager                                                                 
  session-877.scope                              loaded active running   Session 877 of user maurizio        
...      
...

Comparazione tra runlevel e target ( System state) :

  • Run level 3 è emulato dal target multi-user.target;
  • Run level 5 è emulato da target graphycal.target;
  • runlevel3.target  è un link simbolico a multi-user.target;
  • runlevel5.target è un link simbolico a graphycal.target.

Comparazione tra alcuni comandi SysV init (service)  e systemd init (systemctl)

systemctl start sshd.service service sshd start start
systemctl status sshd.service service sshd status status
systemctl stop sshd.service service sshd stop stop
systemctl reload sshd.service service sshd reload reload
ls /lib/systemd/system/*.service /etc/systemd/system/*.service ls /etc/rc.d/init.d/ lista tutti i servizi avviabili
systemctl enabled sshd.service service sshd enabled attivare un servizio al prossimo boot

Avviare e abilitare un servizio al prossimo boot

Per avviare un servizio come il webserver apache2 e come abilitarlo al riavvio al successvio boot

systemctl start apache2 

systemctl enable apache2

Risorse:

Annunci

sysv-rc-conf controllare e impostare i servizi nei vari runlevel linux

E’ un situazione abbastanza frequente, utilizzando un sistema linux con funzioni anche di server, dover verificare che un servizio o demone  (service o daemon)  sia in esecuzione ad esempio: apache ,mysqld, postrgresql, samba, ssh, nfs, rsync, cron, syslogd, etc.

Per visualizzare i servizi possibile utilizzare il comando generale

# service --status-all

che indica anche i servizi attivi

# service --status-all
 [ - ] acpi-fakekey
 [ + ] acpi-support
 [ + ] acpid
 [ + ] atd
 [ + ] avahi-daemon
 [ - ] bootlogs
 [ - ] bootmisc.sh
 [ - ] checkfs.sh
 [ - ] checkroot-bootclean.sh
 [ - ] checkroot.sh
 [ + ] console-setup
 [ + ] cron
 ...

In pratica –status-all consente di vedere  i servizi installati.

Può far comodo anche visualizzare i servizi per runlevel.

Il modo più semplice per visualizzare i servizi attivi in un dato runlevel è digitare un comando del tipo:

sudo ls -l /etc/rc(num-run-level).d/
ls -l /etc/rc3.d
total 84
-rw-r--r-- 1 root root 677 Apr  6  2015 README
lrwxrwxrwx 1 root root  22 May 31 16:19 S01acpi-fakekey -> ../init.d/acpi-fakekey
lrwxrwxrwx 1 root root  14 May 30 16:58 S01motd -> ../init.d/motd
lrwxrwxrwx 1 root root  17 May 30 17:00 S01rsyslog -> ../init.d/rsyslog
lrwxrwxrwx 1 root root  15 May 30 17:02 S02acpid -> ../init.d/acpid
lrwxrwxrwx 1 root root  22 May 31 16:19 S02acpi-support -> ../init.d/acpi-support
lrwxrwxrwx 1 root root  13 May 30 17:19 S02atd -> ../init.d/atd
lrwxrwxrwx 1 root root  14 May 30 17:00 S02cron -> ../init.d/cron
lrwxrwxrwx 1 root root  14 May 30 17:19 S02dbus -> ../init.d/dbus
lrwxrwxrwx 1 root root  15 May 30 17:19 S02exim4 -> ../init.d/exim4
lrwxrwxrwx 1 root root  13 May 30 17:20 S02ssh -> ../init.d/ssh
lrwxrwxrwx 1 root root  22 May 30 17:19 S03avahi-daemon -> ../init.d/avahi-daemon
lrwxrwxrwx 1 root root  18 May 30 17:02 S03bootlogs -> ../init.d/bootlogs
lrwxrwxrwx 1 root root  14 May 30 17:19 S04cups -> ../init.d/cups
...


E possibile elencare gli script che controllano i vari servizi con

ls /etc/init.d

In generale un servizio viene controllato con il comando service:

digitando service nome-de-servizio è possibile visualizzare l’elenco completo delle opzioni possibili

# service nome-del-servizio
# service cron
[info] Usage: /etc/init.d/cron {start|stop|status|restart|reload|force-reload}.

Per visualizzare lo stato del servizio

# service nome-del-servizio status

oppure

# /etc/init.d/nome-del-servizio status

Le espressioni che compaiono in risposta tuttavia possono variare da distribuzione a distribuzione alcune più “verbose2 altre meno comunque  in genere sono molto chiare.

SysV Runlevel Config   ( sysv-rc-conf ) controllare e impostare i servizi nei vari runlevel

Per controllare lo stato di un servizio e impostare i runlevel esistono anche altri comodi comandi in particolare: chkconfig (Centos/RedHat/Fedora ) e il suo derivato sys-rc-conf (Debian/Ubuntu). Come detto si tratta di programmi che consentono di gestire “/etc/rc{runlevel}.d/” symlinks controllando l’avvio dei servizi stessi

Il controllore di servizi sysv-rc-conf si installa al solito con:

# apt-get install sysv-rc-conf

# sysv-rc-conf

sysv-rc-conf debian servizi base

check o uncheck le opzioni per impostare l’avvio di un servizio in un dato runlevel.

Per avviare un servizio premere + per fermarlo

sysv-rc-conf run stop service

modo CLI molto simile a chkconfig

sysv-rc-conf --list

avviare ssh nei runlevel 3 e 5

sysv-rc-conf --level 35 ssh on

disabilitare l’avvio di ssh nei runlevel 35

sysv-rc-conf --level 35 ssh off

 

chkconfig (Centos – RedHat )

Il controllo di servizi di redhat si installa con

yum install chkconfig

impostare l’avvio di postgresql-9.1 nei runlevel 3 e 5

chkconfig --level 35 postgresql on

disattivare l’avvio di postgresql nei runlevel 35

chkconfig --level 35 postgresql off

lista dei servizi con indicate le impostazioni dei runlevel

chkconfig --list

lista dei servizi con indicate le impostazioni dei runlevel 3

chkconfig --list | grep 3:on

Lista dei file delle directory che contengono i vari script lanciati al boot

pstree

I processi sono mostrati con uno schema ad albero. In questo caso INIT è il processo di partenza mentre tutti gli altri processi discendono da questo.

Esempi

Esempi dei comandi da terminale per controllare e configurare i servizi linux con relativo output. Servizi attivi con service –status-all

# service --status-all
 [ - ] acpi-fakekey
 [ + ] acpi-support
 [ + ] acpid
 [ + ] atd
 [ + ] avahi-daemon
 [ - ] bootlogs
 [ - ] bootmisc.sh
 [ - ] checkfs.sh
 [ - ] checkroot-bootclean.sh
 [ - ] checkroot.sh
 [ + ] console-setup
 [ + ] cron
 [ + ] cups
 [ + ] cups-browsed
 [ + ] dbus
 [ + ] ebtables
 [ + ] exim4
 [ + ] hdparm
 [ - ] hostname.sh
 [ - ] hwclock.sh
 [ + ] kbd
 [ + ] keyboard-setup
 [ - ] killprocs
 [ + ] kmod
 [ + ] libvirt-guests
 [ + ] libvirtd
 [ - ] lvm2
 [ - ] motd
 [ - ] mountall-bootclean.sh
 [ - ] mountall.sh
 [ - ] mountdevsubfs.sh
 [ - ] mountkernfs.sh
 [ - ] mountnfs-bootclean.sh
 [ - ] mountnfs.sh
 [ + ] networking
 [ + ] nfs-common
 [ + ] procps
 [ ? ] qemu-system-x86
 [ + ] rc.local
 [ - ] rmnologin
 [ + ] rpcbind
 [ + ] rsyslog
 [ - ] saned
 [ - ] screen-cleanup
 [ - ] sendsigs
 [ + ] ssh
 [ + ] udev
 [ + ] udev-finish
 [ - ] umountfs
 [ - ] umountnfs.sh
 [ - ] umountroot
 [ + ] urandom
 [ - ] x11-common
 [ + ] xrdp

elenco scripts dei servizi  ls /etc/init.d

# ls /etc/init.d
acpid			cups-browsed	libvirt-guests	       rc	       ssh
acpi-fakekey		dbus		lvm2		       rc.local        udev
acpi-support		ebtables	motd		       rcS	       udev-finish
atd			exim4		mountall-bootclean.sh  README	       umountfs
avahi-daemon		halt		mountall.sh	       reboot	       umountnfs.sh
bootlogs		hdparm		mountdevsubfs.sh       rmnologin       umountroot
bootmisc.sh		hostname.sh	mountkernfs.sh	       rpcbind	       urandom
checkfs.sh		hwclock.sh	mountnfs-bootclean.sh  rsyslog	       x11-common
checkroot-bootclean.sh	kbd		mountnfs.sh	       saned	       xrdp
checkroot.sh		keyboard-setup	networking	       screen-cleanup
console-setup		killprocs	nfs-common	       sendsigs
cron			kmod		procps		       single
cups			libvirtd	qemu-system-x86        skeleton
root@debians8vm:/home/maurizio# ls /etc/init.d
acpid			cups-browsed	libvirt-guests	       rc	       ssh
acpi-fakekey		dbus		lvm2		       rc.local        udev
acpi-support		ebtables	motd		       rcS	       udev-finish
atd			exim4		mountall-bootclean.sh  README	       umountfs
avahi-daemon		halt		mountall.sh	       reboot	       umountnfs.sh
bootlogs		hdparm		mountdevsubfs.sh       rmnologin       umountroot
bootmisc.sh		hostname.sh	mountkernfs.sh	       rpcbind	       urandom
checkfs.sh		hwclock.sh	mountnfs-bootclean.sh  rsyslog	       x11-common
checkroot-bootclean.sh	kbd		mountnfs.sh	       saned	       xrdp
checkroot.sh		keyboard-setup	networking	       screen-cleanup
console-setup		killprocs	nfs-common	       sendsigs
cron			kmod		procps		       single
cups			libvirtd	qemu-system-x86        skeleton

Visualizzare i runlevel

sudo ls -l /etc/rc(num-run-level).d/
elecno dei servizi del runlevel 2

# ls -l /etc/rc2.d
total 84
-rw-r--r-- 1 root root 677 Apr  6  2015 README
lrwxrwxrwx 1 root root  22 May 31 16:19 S01acpi-fakekey -> ../init.d/acpi-fakekey
lrwxrwxrwx 1 root root  14 May 30 16:58 S01motd -> ../init.d/motd
lrwxrwxrwx 1 root root  17 May 30 17:00 S01rsyslog -> ../init.d/rsyslog
lrwxrwxrwx 1 root root  14 May 30 23:50 S01xrdp -> ../init.d/xrdp
lrwxrwxrwx 1 root root  15 May 30 17:02 S02acpid -> ../init.d/acpid
lrwxrwxrwx 1 root root  22 May 31 16:19 S02acpi-support -> ../init.d/acpi-support
lrwxrwxrwx 1 root root  13 May 30 17:19 S02atd -> ../init.d/atd
lrwxrwxrwx 1 root root  14 May 30 17:00 S02cron -> ../init.d/cron
lrwxrwxrwx 1 root root  14 May 30 17:19 S02dbus -> ../init.d/dbus
lrwxrwxrwx 1 root root  15 May 30 17:19 S02exim4 -> ../init.d/exim4
lrwxrwxrwx 1 root root  13 May 30 17:20 S02ssh -> ../init.d/ssh
lrwxrwxrwx 1 root root  22 May 30 17:19 S03avahi-daemon -> ../init.d/avahi-daemon
lrwxrwxrwx 1 root root  18 May 30 17:02 S03bootlogs -> ../init.d/bootlogs
lrwxrwxrwx 1 root root  14 May 30 17:19 S04cups -> ../init.d/cups
lrwxrwxrwx 1 root root  22 May 30 17:20 S04cups-browsed -> ../init.d/cups-browsed
lrwxrwxrwx 1 root root  18 May 30 22:54 S04libvirtd -> ../init.d/libvirtd
lrwxrwxrwx 1 root root  15 Sep 10 19:05 S04saned -> ../init.d/saned
lrwxrwxrwx 1 root root  24 May 30 22:54 S05libvirt-guests -> ../init.d/libvirt-guests
lrwxrwxrwx 1 root root  18 May 30 22:54 S06rc.local -> ../init.d/rc.local
lrwxrwxrwx 1 root root  19 May 30 22:54 S06rmnologin -> ../init.d/rmnologin

Elaborazione lista servizi

# ls -1 /etc/rc$(runlevel| cut -d" " -f2).d/S*
/etc/rc5.d/S01acpi-fakekey
/etc/rc5.d/S01motd
/etc/rc5.d/S01rsyslog
/etc/rc5.d/S02acpid
/etc/rc5.d/S02acpi-support
/etc/rc5.d/S02atd
/etc/rc5.d/S02cron
/etc/rc5.d/S02dbus
/etc/rc5.d/S02ssh
/etc/rc5.d/S03avahi-daemon
/etc/rc5.d/S03bootlogs
/etc/rc5.d/S04libvirtd
/etc/rc5.d/S05libvirt-guests
/etc/rc5.d/S06rc.local
/etc/rc5.d/S06rmnologin
/etc/rc5.d/S90umountroot

Pulizia completa

# ls -1 /etc/rc$(runlevel| cut -d" " -f2).d/S* | \
> awk -F'[0-9][0-9]' '{print "Startup :-> " $2}'
Startup :-> acpi-fakekey
Startup :-> motd
Startup :-> rsyslog
Startup :-> acpid
Startup :-> acpi-support
Startup :-> atd
Startup :-> cron
Startup :-> dbus
Startup :-> ssh
Startup :-> avahi-daemon
Startup :-> bootlogs
Startup :-> libvirtd
Startup :-> libvirt-guests
Startup :-> rc.local
Startup :-> rmnologin
Startup :-> umountroot

Controllare  un servizio:

# service nome-del-servizio status

oppure

# /etc/init.d/nome-del-servizio status

Le espressioni che compaiono in risposta tuttavia possono variare da distribuzione a distribuzione alcune più “verbose2 altre meno comunque  in genere sono molto chiare.

centos 5

$ service postgresql-9.1 status
(pid 29401) is running...

service mysqld status
mysqld (pid 2879) is running...

ubuntu  12

$ service postgresql status
9.1/main (port 5432): online

~$ service apache2 status
Apache2 is running (pid 17803)

Per verificare lo stato di tutti i servizi presenti nel sistema basta usare l’opzione –status-all

# service nome-del-servizio status

Lista dei file delle directory che contengono i vari script lanciati al boot

# pstree
# pstree
systemd─┬─acpid
        ├─agetty
        ├─atd
        ├─avahi-daemon───avahi-daemon
        ├─cron
        ├─cups-browsed
        ├─cupsd
        ├─dbus-daemon
        ├─dnsmasq───dnsmasq
        ├─exim4
        ├─libvirtd───10*[{libvirtd}]
        ├─rpc.idmapd
        ├─rpc.statd
        ├─rpcbind
        ├─rsyslogd─┬─{in:imklog}
        │          ├─{in:imuxsock}
        │          └─{rs:main Q:Reg}
        ├─sshd───sshd───sshd───bash───su───bash───pstree
        ├─systemd───(sd-pam)
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─xrdp
        └─xrdp-sesman

sysv-rc-conf  check o uncheck per impostare l’avvio di un servizio in un dato runlevel.

sysv-rc-conf debian servizi base

check per abilitare altri servizi

sysv-rc-conf debian

sysv-rc-conf warning:

sysv-rc-conf debian run stop warning

 

Risorse:

 

Come controllare che un servizio (service) sia in esecuzione in linux

New_icons_17 (2017) Come controllare che un servizio sia in esecuzione in linux con installato il nuovo demone  systemd (comando:systemctl)  in alternativa al demone init SysV (comando: service) e comparazione tra i comandi: service e systemctl 

E’ un situazione abbastanza frequente, utilizzando un sistema linux con funzioni anche di server, dover verificare che un servizio o demone  (service o daemon)  sia in esecuzione ad esempio: apache ,mysqld, postrgresql, samba, ssh, nfs, rsync, cron, syslogd, etc.

Il altre situazione alcune modifiche ai files di configurazione richiedono il riavvio del servizio di cui si sta modificando la configurazione ad esempio:   httpd.conf per apache, pg_hda.conf  e/o postgresql.conf per postgresql… E’ anche in questo caso potrebbe essere opportuno controllare lo stato del server.

In generale un servizio viene controllato con il comando:

$ service nome-del-servizio status

oppure

$ /etc/init.d/nome-del-servizio status

Le espressioni che compaiono in risposta tuttavia possono variare da distribuzione a distribuzione alcune più “verbose2 altre meno comunque  in genere sono molto chiare.
alcuni esempi:

centos 5

$ service postgresql-9.1 status
(pid 29401) is running...

service mysqld status
mysqld (pid 2879) is running...

ubuntu  12

$ service postgresql status
9.1/main (port 5432): online

~$ service apache2 status
Apache2 is running (pid 17803)

Per verificare lo stato di tutti i servizi presenti nel sistema basta usare l’opzione –status-all

$ service --status-all

In pratica –status-all consente di vedere  i servizi installati.   Può far comodo anche visualizzare i servizi per runlevel.

Visualizzare i runlevel

Il modo più semplice per visualizzare i servizi attivi in un dato runlevel è digitare un comando del tipo:

sudo ls -l /etc/rc(num-run-level).d/

Controllare e impostare i servizi nei vari runlevel

Per controllare lo stato di un servizio e impostare i runlevel di avvio per un servizio si possono utilizzare anche altri comandi in particolare: chkconfig (Centos/RedHat/Fedora ) e sys-rc-conf (Debian/Ubuntu). Come detto si tratta di programmi che consentono di gestire “/etc/rc{runlevel}.d/” symlinks controllando l’avvio dei servizi stessi

chkconfig (Centos – RedHat )

Il controllo di servizi di redhat si installa con

yum install chkconfig

impostare l’avvio di postgresql-9.1 nei runlevel 3 e 5

chkconfig --level 35 postgresql on

disattivare l’avvio di postgresql nei runlevel 35

chkconfig --level 35 postgresql off

lista dei servizi con indicate le impostazioni dei runlevel

chkconfig --list

lista dei servizi con indicate le impostazioni dei runlevel 3

chkconfig --list | grep 3:on

sysv-rc-conf ( Debian – Ubuntu )

Per controllare i servizi in ubuntu debian utilizzare sysv-rc-conf  l’equivalente  di chkconfig.   il controllore di servizi sysv-rc-conf si installa con:

sudo apt-get install sysv-rc-conf
sudo sysv-rc-conf

check o uncheck le opzioni per impostare l’avvio di un servizio in un dato runlevel.

Per avviare un servizio premere + per fermarlo –

modo CLI molto simile a chkconfig
sysv-rc-conf --list

avviare ssh nei runlevel 3 e 5

sysv-rc-conf --level 35 ssh on

disabilitare l’avvio di ssh nei runlevel 35

sysv-rc-conf --level 35 ssh off

Altri comandi che si possono installare per controllare i servizi

sysvconfig
ntsysv

Lista dei file delle directory che contengono i vari script lanciati al boot

pstree

I processi sono mostrati con uno schema ad albero. In questo caso INIT è il processo di partenza mentre tutti gli altri processi discendono da questo.

New_icons_17 (2017) Come controllare che un servizio sia in esecuzione in linux con installato il nuovo demone  systemd (comando:systemctl)  in alternativa al demone init SysV (comando: service) e comparazione tra i comandi

Risorse:

chkconfig e sysv-rc-conf

chkconfig (Centos/RedHat/Fedora ) e sys-rc-conf (Debian/Ubuntu) sono programmi che consentono di gestire “/etc/rc{runlevel}.d/” symlinks controllando l’avvio dei servizi

chkconfig (Centos – RedHat )    –  SUSE

yum install chkconfig

impostare l’avvio di postgresql-9.1 nei runlevel 3 e 5

chkconfig –level 35 postgresql on

disattivare l’avvio di postgresql nei runlevel 35

chkconfig –level 35 postgresql off

lista dei servizi con indicate le impostazioni dei runlevel

chkconfig –list

lista dei servizi con indicate le impostazioni dei runlevel 3

chkconfig –list | grep 3:on

chkconfig –  SUSE

chckconfig può essere utilizzato anche in SUSE

Per l’eventuale installazione

su

zypper install chkconfig

sysv-rc-conf ( Debian – Ubuntu )

sudo apt-get install sysv-rc-conf

sudo sysv-rc-conf

check o uncheck le opzioni per impostare l’avvio di un servizio in un dato runlevel.

Per avviare un servizio premere + per fermarlo –

modo CLI molto simile a chkconfig

sysv-rc-conf –list

avviare ssh nei runlevel 3 e 5

sysv-rc-conf –level 35 ssh on

disabilitare l’avvio di ssh nei runlevel 35

sysv-rc-conf –level 35 ssh off

 

 

 

Altri comandi che si possono installare per controllare i servizi

sysvconfig

ntsysv

Lista dei file delle directory che contengono i vari script lanciati al boot

pstree

I processi sono mostrati con uno schema ad albero. In questo caso INIT è il processo di partenza mentre tutti gli altri processi discendono da questo.