리눅스 / 명령어 / systemctl
systemctl은 systemd가 관리하는 서비스와 다른 유닛의 상태를 확인하고 시작·중지하거나 부팅 시 활성화 여부를 설정하는 명령입니다. 현재 실행 상태와 부팅 시 활성화 상태는 서로 다르므로 각각 확인해야 합니다.
시작하기 전에
systemd는 Linux의 시스템 및 서비스 관리자이며, 관리 대상인 유닛에는 서비스(.service)뿐 아니라 타이머와 소켓도 있습니다. 이 글은 systemd를 사용하는 Linux에서 시스템 서비스를 관리하는 방법을 설명합니다. 다른 초기화 시스템이나 systemd가 실행되지 않는 환경에서는 그대로 사용할 수 없습니다. 자세한 명령은 systemctl 공식 매뉴얼을 참고하세요.
아래의 apache2.service는 Ubuntu에서 Apache가 설치된 경우의 예입니다. 설치되어 있지 않으면 해당 유닛을 찾을 수 없으며, 배포판에 따라 이름이 다를 수 있습니다. 실습 전에 실제 서비스 이름을 확인하고, 운영 중인 웹 서버나 원격 접속 서비스를 중지하면 접속이 끊길 수 있으므로 안전한 시험 환경을 사용하세요. 상태 조회는 일반 사용자로 가능한 경우가 많지만 시스템 서비스를 변경하려면 보통 관리자 권한이 필요합니다.
서비스 상태와 이름 확인하기
현재 로드된 서비스와 설치된 서비스 유닛 파일을 각각 확인합니다. 두 목록은 기준이 달라서 결과가 같지 않을 수 있습니다.
systemctl list-units --type=service --all
systemctl list-unit-files --type=service
첫 번째는 systemd에 로드된 서비스 중 비활성 유닛도 포함해 보여 줍니다. 두 번째는 설치된 서비스 유닛 파일과 활성화 상태를 보여 주므로, 아직 로드되지 않은 서비스를 찾을 때도 유용합니다. 목록이 길어 호출기가 열리면 q를 눌러 종료하세요.
예를 들어 Apache 서비스의 상태와 최근 로그를 확인하려면 다음과 같이 입력합니다.
systemctl status apache2.service
systemctl is-active apache2.service
systemctl is-enabled apache2.service
status의 Active: active (running)은 현재 실행 중이라는 뜻이고, inactive는 비활성, failed는 실패 상태를 뜻합니다. 세부 상태는 서비스 유형에 따라 다릅니다. is-active는 현재 상태를, is-enabled는 활성화 상태를 확인합니다. static 유닛은 일반적인 방식으로 직접 활성화할 수 없지만 다른 유닛에 의해 시작될 수 있습니다.
서비스 시작·중지·재시작
다음 명령은 실제 서비스 상태를 변경합니다. 예의 서비스 이름을 사용할 시스템에 맞게 바꾸고, 실행하기 전에 해당 서비스가 중지되어도 되는지 확인하세요.
sudo systemctl start apache2.service
sudo systemctl stop apache2.service
sudo systemctl restart apache2.service
start는 서비스를 시작하고 stop은 중지합니다. restart는 서비스를 중지한 뒤 다시 시작하며, 중지된 서비스도 시작할 수 있습니다. 명령은 필요한 것 하나만 실행하세요. 각 작업 후 systemctl status apache2.service로 결과를 확인합니다. 이미 실행 중인 서비스라도 재시작 중에는 연결이 잠시 끊길 수 있습니다.
서비스가 자체 설정 다시 읽기를 지원하면 sudo systemctl reload apache2.service로 설정을 다시 적용할 수 있습니다. 지원 여부와 적용 방식은 서비스마다 다릅니다. reload와 restart는 같은 동작이 아니며, 설정을 검사하는 방법도 해당 서비스의 문서를 따르세요.
부팅 시 활성화와 현재 실행 상태
다음 명령은 부팅 과정 등에서 유닛이 시작되도록 연결을 설정하거나 해제합니다. enable만 실행해도 지금 즉시 시작되는 것은 아니며, disable만 실행해도 이미 실행 중인 서비스가 즉시 중지되지는 않습니다.
sudo systemctl enable apache2.service
sudo systemctl disable apache2.service
systemctl is-enabled apache2.service
필요한 명령만 선택해 실행하고 마지막 명령으로 결과를 확인하세요. enabled는 활성화, disabled는 비활성화 상태입니다. 단, 다른 유닛의 의존성이나 소켓·타이머 등으로 서비스가 시작될 수도 있으므로 disable을 모든 시작 경로의 차단으로 이해하면 안 됩니다.
활성화와 즉시 시작을 함께 하려면 sudo systemctl enable --now apache2.service를, 비활성화와 즉시 중지를 함께 하려면 sudo systemctl disable --now apache2.service를 사용할 수 있습니다. 각 명령의 영향을 확인하고 시험 환경에서만 연습하세요.
문제가 생겼을 때 확인할 사항
실패한 유닛 목록과 특정 서비스의 최근 로그를 확인합니다. 로그에는 민감한 정보가 포함될 수 있으므로 공유하기 전에 내용을 검토하세요.
systemctl --failed
sudo journalctl -u apache2.service -n 50 --no-pager
서비스를 찾을 수 없다면 이름과 설치 여부를 확인합니다. 시작에 실패했다면 status와 로그에서 설정 오류, 의존 서비스, 포트 충돌 또는 권한 문제를 살펴봅니다. masked 상태는 시작이 막힌 상태이므로 원인을 확인하기 전에 임의로 해제하지 마세요. 배포판과 서비스 설정에 따라 메시지와 해결 방법은 달라집니다.
유닛 파일을 변경한 경우
systemd 유닛 파일이나 드롭인 설정을 수정했다면 다음 명령으로 systemd가 유닛 정의를 다시 읽게 합니다.
sudo systemctl daemon-reload
이 명령은 서비스 자체를 재시작하거나 서비스의 설정 파일을 다시 읽게 하지 않습니다. 변경 내용을 실행 중인 서비스에 적용해야 한다면 서비스와 변경 내용에 맞는 별도의 재시작 또는 reload가 필요할 수 있습니다. 변경 전 설정을 백업하고 원래 상태로 되돌릴 방법을 확인하세요.




