이 가이드에서는 systemctl 명령어를 사용해 시스템의 서비스 목록을 확인하고 각 서비스의 상태를 점검하는 방법을 소개합니다. 더불어 서비스 제어, 활성화/비활성화 등 systemctl의 다양한 활용 팁까지 함께 다룹니다.
기존의 init 방식에서 넘어온 사용자에게 systemctl은 꽤나 신선한 변화입니다. 찬반 논쟁이 많고 저 역시 몇 번씩 생각이 바뀌었지만, 매일 업무에서 사용해 온 결과 지금은 분명히 systemctl 진영에 서 있습니다. 명령어 문법이 훨씬 직관적이고 자연스럽게 느껴지며, 일상적인 운영 측면에서도 만족스럽습니다. 이제 구형 시스템을 다룰 때마다 예전 방식으로 돌아가기가 오히려 불편할 정도입니다. 그럼 systemctl의 기본 개념과 실전 활용법을 하나씩 살펴보겠습니다.
서비스 상태 확인하기 (systemctl status)
systemctl의 가장 기본적이면서 중요한 용도는 서비스 상태 확인입니다. 기본 문법은 다음과 같습니다.
#systemctl command argument #systemctl status service
위 명령을 실행하면 해당 서비스(atd)의 상세 정보가 출력됩니다. 서비스가 언제 시작되었는지, 현재 활성 상태인지, 프로세스 ID(PID)는 무엇인지 한눈에 파악할 수 있습니다. PID를 알면 필요할 때 프로세스를 종료할 수 있으며, 물론 systemctl로도 종료가 가능합니다.
실패한 서비스 점검
상태 점검의 첫걸음으로, 실패(failed) 상태인 서비스를 빠르게 확인해 보세요.
#systemctl --failed --type=service
목록에 실패한 서비스가 있다면 이것이 정상적인 상황인지 조사해야 합니다. '정상'이 어떤 상태인지 모르겠다면, 현재 실행 중인 서비스 목록을 먼저 확인해 보세요.
#systemctl -t service --state=active
상태 로그 저장 및 비교
서비스 정보를 확인한 뒤에는 파일로 저장해 두는 것이 좋습니다.
#systemctl -t service --state=active > day1systemhealth.log
다음 날 같은 명령으로 새 로그를 생성합니다.
#systemctl -t service --state=active > day2systemhealth.log
그리고 diff 명령으로 두 로그를 비교하면 됩니다.
#diff day1systemhealth.log day2systemhealth.log
이렇게 하면 어떤 서비스가 켜져 있어야 하는데 꺼졌는지, 혹은 반대로 새로 실행되었는지 즉시 파악할 수 있습니다. 새로 맡은 시스템에 익숙해지는 과정이라면 아래의 핵심 서비스들을 우선적으로 점검해 보는 것을 추천합니다.
LAMP 스택 점검
대부분의 관리자가 초기에 배우는 기본 스택인 LAMP(Linux, Apache, MySQL/MariaDB, PHP)부터 살펴보겠습니다. 참고로 찾으려는 서비스 이름을 정확히 모른다면 걱정하지 않아도 됩니다. systemctl은 탭(Tab) 자동 완성을 지원합니다. apache까지만 입력한 뒤 Tab 키를 두 번 누르면 후보 목록이 나타나므로 원하는 항목을 선택하면 됩니다.
#systemctl status apache2.service mongo mysql
더 깊이 들어가고 싶다면 의존성(dependency) 정보를 확인해 보세요.
#systemctl list-dependencies apache2.service
이 명령은 해당 서비스가 의존하는 모든 구성 요소를 보여주며, 각 항목의 상태를 색상 점으로 직관적으로 표시합니다. 초록색은 정상, 빨간색은 실패를 의미합니다.
네트워크 서비스 점검
다음으로 네트워크가 정상 동작하는지 확인해 보겠습니다.
#systemctl status networking ufw wpa
눈치채셨겠지만, 제가 가장 좋아하는 systemctl의 기능은 여러 서비스를 한 번에 동시에 조회하고 제어할 수 있다는 점입니다. 게다가 긴 출력 결과는 자동으로 less에 연결되어 페이지 단위로 편하게 볼 수 있습니다.
서비스 제어하기
이제 실패한 서비스를 발견했거나, 설정 변경 사항을 적용해야 하는 상황을 가정해 보겠습니다. 예를 들어 sshd_config 파일을 수정했다면 설정을 다시 불러와야 하고, 새 서비스를 추가했거나 완전히 제거해야 할 수도 있습니다.
systemctl에서는 크게 두 가지 옵션을 사용합니다. reload(재적재)와 restart(재시작)입니다. reload는 설정 파일만 새로 읽어들이며 기존 연결은 유지됩니다. 반면 restart는 모든 연결을 끊고 설정 파일을 다시 불러옵니다. 상황에 따라 각각의 장점이 있으니 용도에 맞게 선택하세요.
restart와 reload
#systemctl restart atd #systemctl status atd
명령 실행 후 status로 확인하면 재시작된 시간 등 새로운 정보가 반영된 것을 볼 수 있습니다. 로드 밸런싱이 잘 갖춰진 견고한 시스템이라면 저는 restart를 선호합니다. 연결이 자동으로 다른 노드로 우회되어 사실상 다운타임 없이 작업할 수 있고, reload를 지원하지 않는 일부 서비스와의 호환성 문제도 걱정할 필요가 없기 때문입니다. 어느 쪽이든 재시작이나 재적재 전에는 반드시 사용자와 고객에게 미리 공지하는 것이 원칙입니다.
stop, start, kill
서비스를 중단하거나 강제 종료해야 할 때도 systemctl로 손쉽게 처리할 수 있습니다.
#systemctl stop atd #systemctl start atd #systemctl kill atd #systemctl start atd
stop으로 중지했다가 start로 다시 켜거나, kill로 강제 종료 후 재시작하면 사실상 restart와 동일한 효과를 낼 수 있습니다.
부팅 시 자동 시작 설정 (enable / disable)
새로 설치한 서비스를 부팅 시 자동으로 시작되게 하려면 enable로 활성화해야 합니다.
#systemctl enable <service>
이렇게 하면 시스템이 부팅 시점에 해당 서비스를 자동으로 시작합니다. 재부팅 없이 바로 사용하고 싶다면 start 명령으로 즉시 실행하면 됩니다.
반대로 부팅 시 자동 시작을 해제하려면 disable을 사용합니다.
#systemctl disable <service>
disable은 자동 시작만 해제할 뿐 서비스를 삭제하지는 않습니다. 서비스를 완전히 제거하려면 stop으로 중지한 뒤 패키지를 uninstall(제거)해야 합니다.
마무리
지금까지 systemctl의 핵심 사용법을 살펴봤습니다. 생각보다 어렵지 않습니다. systemctl은 시스템을 제어한다는 하나의 목적에 충실한 도구일 뿐입니다. 여기에 더해 다양한 셸 명령어와 시스템 관리 기법을 함께 익혀두면 훨씬 능숙하게 서버를 운영할 수 있습니다.