systemd는 재부팅 후에도 상태를 유지할 수 있습니까?

systemd는 재부팅 후에도 상태를 유지할 수 있습니까?

저는 systemd에 의해 제어되는 수십 개의 데몬이 있는 Linux 서버를 설정하고 있습니다. 데몬은 대상별로 그룹화되어 그룹별로 시작 및 종료가 가능하지만 시스템 관리자가 개별 서비스를 수동으로 제어할 수 있습니다. 재부팅 시 상태(활성화된 서비스)를 보존하는 방법을 찾고 있습니다. 아이디어는 서버에서 디버깅, 테스트 및 개발을 수행하는 사람들이 필요에 따라 서버를 다시 시작하고 다시 시작 전과 동일하게 구성된 시스템을 유지할 수 있다는 것입니다.

systemd의 snapshot기능은 이에 이상적이지만 내가 아는 한 나중에 사용하기 위해 디스크에 스냅샷을 쓸 수는 없습니다.

multi-user.target.wants/내 원래 계획은 이름이 지정된 서비스에 대한 심볼릭 링크를 만드는 것이었습니다 bootingup.service. 시스템 관리자가 활성화한 각 대상은 bootingup.service.d/bootingup.conf방금 활성화한 대상을 시작하도록 재정의됩니다. 즉, 시스템은 시작 시 가장 최근에 시작된 대상을 활성화하지만 개별적으로 활성화/비활성화된 서비스는 기억하지 않습니다.

재부팅 후 systemd가 모든 서비스의 상태를 기억하도록 하는 방법이 있습니까?

답변1

나는 이 질문에 다음과 같이 대답하겠습니다.

실행 중인 항목을 덤프하고 복원하는 대신 개발자가 서비스에서 enable, disable, 등을 올바르게 사용하도록 강제하는 것이 좋습니다 .afterwantssystemd

이제 시스템에서 제거했으므로...


systemctl snapshot당신이 찾고 있는 일을 하는 데 도움이 될 수 있습니다.

실행하면 systemctl snapshot ${SNAPSHOT_NAME} systemd이라는 유닛이 생성됩니다 ${SNAPSHOT_NAME}.snapshot. 이 유닛은 메모리에만 존재하는 것 같습니다. 그러나 를 사용하여 계속 쿼리할 수 있습니다 systemctl.

을 사용하면 systemctl show ${SNAPSHOT_NAME}.snapshot스냅샷에 대해 수집된 모든 정보가 나열됩니다 systemd. 특히 스냅샷 당시 활성 상태였던 모든 셀을 나열하는 Wants=/ 섹션(둘 다 동일한 것으로 나타남)이 있습니다. After=해당 목록을 구문 분석하여 사용자 정의 대상에 넣으려면 를 사용할 수 있습니다 systemctl isolate ${CUSTOM_TARGET}.

systemctl 격리

명령줄에 지정된 장치와 해당 종속성을 시작하고 다른 모든 장치를 중지합니다. 확장자 없이 유닛 이름이 주어지면 확장자는 ".target"으로 간주됩니다.

이는 기존 초기화 시스템에서 실행 수준을 변경하는 것과 유사합니다. 격리 명령은 현재 사용 중인 그래픽 환경이나 터미널을 포함할 수 있는 새 장치에서 활성화되지 않은 프로세스를 즉시 중지합니다.

이는 AllowIsolate=가 활성화된 장치에서만 허용됩니다. 자세한 내용은 systemd.unit(5)을 참조하세요.

${CUSTOM_TARGET} Wants종료 시 업데이트/부분적으로 서비스를 작성할 수도 있습니다 After.

답변2

이를 위해서는 Puppet이나 Ansible과 같은 구성 관리자를 사용해야 한다고 생각합니다. 구성 관리자는 시스템을 원하는 방식으로 유지하는 가장 좋은 방법입니다. 시스템 스냅샷은 재부팅 후에도 유지되지 않습니다.

관련 정보