.png)
프로덕션 환경에서 시스템 서비스의 이름을 바꿔야 하는 데는 여러 가지 이유가 있습니다. 예를 들어:
- 새것과 더 잘 구별하기 위해
- 사장님이 주문하셨기 때문에
- 레거시 스크립트로 인해
- ...
새로운 일반 서비스가 /etc/systemd/system/foo.service
다음과 같이 생성되고 활성화되어 시작되었다고 가정합니다. [1]
systemctl daemon-reload
systemctl enable --now foo
그런 다음 관련 프로세스에 어떤 영향도 주지 않고 이름을 에서 foo.service
로 바꿀 수 있습니다 .bar.service
일반적인 상황에서는 다음과 같이 하면 됩니다.
mv foo.service bar.service
systemctl daemon-reload
systemctl disable foo
systemctl enable bar
그러면 다음을 얻을 수 있습니다.
systemctl status foo
:running
not-found
disabled
systemctl status bar
:not-running
enabled
따라서 다음을 사용하여 문제를 해결할 수 있습니다.
systemctl stop foo
systemctl start bar
아니면 재부팅하세요. 그러나 프로덕션 환경에서는 이러한 변경으로 인해 애플리케이션을 중지하고 싶지 않기 때문에 이는 실현 가능하지 않습니다. 또한 재부팅은 몇 달 또는 몇 년 후에 예약됩니다. 동시에, 그렇게 중지된 서비스를 오랫동안 유지하는 것은 위험합니다. bar
찾을 수 없는 실행을 중지하기 전에 실수로 시작해서는 안 됩니다 foo
.
요컨대. 프로덕션에서 시스템 서비스의 이름을 바꾸려면 어떤 접근 방식을 사용하시겠습니까?
이상적인 조건은 두 서비스가 이전 버전과 호환되는 것입니다. 따라서 정지 foo
도 정지 bar
되고 그 반대도 마찬가지입니다.
답변1
내가 모르는 더 나은 방법이 있을 수 있지만 이는 서비스를 다시 시작할 수 있을 때까지 필요한 것을 대부분 얻을 수 있는 해결 방법으로 생각됩니다.
- 기존 서비스 파일(및 )을 가리키는 원하는 새 이름으로 심볼릭 링크를 만듭니다
systemctl daemon-reload
.
시스템화됨유닛에 대한 심볼릭 링크를 별칭으로 처리합니다.별도의 단위 대신 두 이름이 이제 동일한 단위(동일한 상태, 동일한 모든 것)를 나타냄을 의미합니다. - 다음 유지 관리 기간에 실제로 서비스를 교체할 계획을 세우세요.