systemctl status에 동일한 서비스가 두 번 나열됩니까?

systemctl status에 동일한 서비스가 두 번 나열됩니까?

약간 혼란스러운 상황입니다. 제가 아는 한, 문제의 서비스가 여전히 작동하는 것 같기 때문에 위기는 아닙니다.

배경은 내 데비안 버전에서는 사용할 수 없었던 최신 apache2로 업그레이드하고 싶어서 소스에서 빌드하고 에 설치하고 /usr/local/apache2/서비스 파일을 변경하고 다음을 수행했다는 것입니다 systemctl daemon-reload.

root@vogon:~# cat /lib/systemd/system/apache2.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=https://httpd.apache.org/docs/2.4/

[Service]
Type=forking
Environment=APACHE_STARTED_BY_SYSTEMD=true
ExecStart=/usr/local/apache2/bin/apachectl start
ExecStop=/usr/local/apache2/bin/apachectl graceful-stop
ExecReload=/usr/local/apache2/bin/apachectl graceful
KillMode=mixed
PrivateTmp=true
Restart=on-abort

[Install]
WantedBy=multi-user.target

어떤 이유로 이것이 작동하지 않았고 여전히 그것을 알아내야 했기 때문에 이전의 방식으로 다시 변경했습니다. 이제 서비스가 두 번 표시됩니다.

root@vogon:~# systemctl status *apa*
● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2024-03-06 10:29:12 UTC; 21min ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 3660993 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
   Main PID: 3660997 (apache2)
      Tasks: 9 (limit: 35927)
     Memory: 68.8M
        CPU: 22.258s
     CGroup: /system.slice/apache2.service
             ├─3660997 /usr/sbin/apache2 -k start
             ├─3660998 /usr/sbin/apache2 -k start
             ├─3660999 /usr/sbin/apache2 -k start
             ├─3661000 /usr/sbin/apache2 -k start
             ├─3661001 /usr/sbin/apache2 -k start
             ├─3661002 /usr/sbin/apache2 -k start
             ├─3661003 /usr/sbin/apache2 -k start
             ├─3661006 /usr/sbin/apache2 -k start
             └─3661007 /usr/sbin/apache2 -k start

Mar 06 10:29:12 vogon systemd[1]: Starting The Apache HTTP Server...
Mar 06 10:29:12 vogon systemd[1]: Started The Apache HTTP Server.

● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2024-03-06 10:29:12 UTC; 21min ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 3660993 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
   Main PID: 3660997 (apache2)
      Tasks: 9 (limit: 35927)
     Memory: 68.8M
        CPU: 22.258s
     CGroup: /system.slice/apache2.service
             ├─3660997 /usr/sbin/apache2 -k start
             ├─3660998 /usr/sbin/apache2 -k start
             ├─3660999 /usr/sbin/apache2 -k start
             ├─3661000 /usr/sbin/apache2 -k start
             ├─3661001 /usr/sbin/apache2 -k start
             ├─3661002 /usr/sbin/apache2 -k start
             ├─3661003 /usr/sbin/apache2 -k start
             ├─3661006 /usr/sbin/apache2 -k start
             └─3661007 /usr/sbin/apache2 -k start

Mar 06 10:29:12 vogon systemd[1]: Starting The Apache HTTP Server...
Mar 06 10:29:12 vogon systemd[1]: Started The Apache HTTP Server.

서비스 이름을 철자하면 apache2한 번만 표시되지만 이전에는 와일드카드와 동일했습니다. 왜 그런 겁니까?

답변1

현재 작업 디렉터리에 패턴과 일치하는 파일이 있으면 셸은 해당 파일을 확장합니다("경로 이름 확장", 일명 globbing).

예를 들어 패턴과 일치하는 두 개의 파일을 만듭니다. 명령을 실행 하면 echo확장된 파일 이름 상태에서 실행되는 것을 볼 수 있습니다.

$ touch apache apache2
$ echo systemctl status *apa* 
systemctl status apache apache2

이것이 2개의 결과를 얻는 이유입니다.

$ systemctl status *apa* |grep -B1 Loaded:
● apache2.service - The Apache Webserver
     Loaded: loaded (/usr/lib/systemd/system/apache2.service; enabled; vendor preset: disabled)
--
● apache2.service - The Apache Webserver
     Loaded: loaded (/usr/lib/systemd/system/apache2.service; enabled; vendor preset: disabled)

이를 방지하려면 확장을 방지하기 위해 스키마를 인용해야 합니다.

$ systemctl status '*apa*' |grep -B1 Loaded:
● apache2.service - The Apache Webserver
     Loaded: loaded (/usr/lib/systemd/system/apache2.service; enabled; vendor preset: disabled)

관련 정보