systemctl 상태에서 더 짧은/사용자 정의 출력을 얻는 방법이 있습니까? 서비스 이름 앞에 활성 줄만 있으면 됩니다. 그래서 다음과 같습니다.
apache2: active (running) since Thu 2020-02-06 17:20:42 +03; 16min ago
mongodb: inactive (dead) since Thu 2020-02-06 17:20:47 +03; 16min ago
rabbitmq-server: active (running) since Thu 2020-02-06 17:20:52 +03; 16min ago
mongodb-server: active (running) since Thu 2020-02-06 17:20:54 +03; 16min ago
mysql: active (running) since Thu 2020-02-06 17:20:57 +03; 16min ago
색상 피드백만 가능합니다. 하지만 나는 색깔 없이 만족할 것이다. 또는 다음과 같이 두 줄에 빈 줄을 추가합니다.
● apache2.service - The Apache HTTP Server
Active: active (running) since Thu 2020-02-06 17:20:42 +03; 16min ago
● mongodb.service - An object/document-oriented database
Active: inactive (dead) since Thu 2020-02-06 17:20:47 +03; 16min ago
● redis-server.service - Advanced key-value store
Active: active (running) since Thu 2020-02-06 17:20:52 +03; 16min ago
● rabbitmq-server.service - RabbitMQ Messaging Server
Active: active (running) since Thu 2020-02-06 17:20:54 +03; 16min ago
● mysql.service - MySQL Community Server
Active: active (running) since Thu 2020-02-06 17:20:57 +03; 16min ago
이런 종류는 후자를 만족시킵니다.
systemctl status apache2.service mongodb.service \
redis.service rabbitmq-server.service mysql.service | grep -e Active -e ●
하지만 공백이 없어 색상이 엉망이 되고, 내가 원하는 것을 정확하게 얻을 수 있는 어딘가에 systemctl 옵션이나 구성이 있을 것으로 기대합니다.
답변1
따라서 이런 방식으로 출력 형식을 지정하는 기본 방법은 없지만 systemctl
파이프를 사용하여 약간의 창의력을 발휘하면 어쨌든 이를 수행할 수 있습니다.
먼저 시스템에서 실행 중인 모든 서비스 목록이 필요합니다.
# systemctl -t service --state=running --no-legend --no-pager
accounts-daemon.service loaded active running Accounts Service
atd.service loaded active running Deferred execution scheduler
containerd.service loaded active running containerd
...
시간 출력이 없습니다. 이를 얻으려면 플래그 systemctl show
가 있는 유닛에 대해 호출해야 합니다 --property=ActiveEnterTimestamp
. 예:
# systemctl show accounts-daemon.service --property=ActiveEnterTimestamp
ActiveEnterTimestamp=Wed 2019-12-11 21:44:50 UTC
이제 해당 출력을 출력 끝에 스테이플로 고정할 수 있는 방법만 있다면 systemctl
.. 그렇게 합니다!
이것은 추악한 한 줄의 내용이지만 작업이 완료됩니다.
systemctl -t service --state=running --no-legend --no-pager | cut -d ' ' -f 1 | while read f; do STARTTIME=`systemctl show $f
--property=ActiveEnterTimestamp | sed 's/ActiveEnterTimestamp=//'`; echo "$f $STARTTIME"; done`
설명하기:
- 명령 은
cut
공백으로 분할되고systemctl
서비스 이름인 에서 첫 번째 필드를 가져옵니다. - 해당 서비스 이름을 이름이 지정된 변수로 파이프하는 while 루프를 입력합니다.
$f
- 시작 시간 플래그가 있는 출력을
STARTTIME
포함하는 변수를 생성합니다 .systemctl show
sed
실제 텍스트를 제거하여 시간ActiveEnterTimestamp=
만 제공합니다.- 마지막으로
echo
서비스 이름과 정리된 시작 시간을 공백으로 구분합니다.
최종 출력은 다음과 같습니다.
accounts-daemon.service Wed 2019-12-11 21:44:50 UTC
atd.service Wed 2019-12-11 21:44:48 UTC
containerd.service Wed 2019-12-11 21:44:50 UTC