시스템 부팅 순서: mysql.sock을 기다립니다.

시스템 부팅 순서: mysql.sock을 기다립니다.

--upIP 라우팅 정보에 대해 로컬 mysql 데이터베이스를 쿼리한 다음 경로를 적용하는 스크립트를 실행하는 openvpn 터널이 있습니다 . 그러나 openvpn 및 mysql systemd 서비스는 모두 지시문으로 구성되므로 After=network.target경쟁 조건이 발생합니다. --up스크립트가 실행될 때 /var/run/mysqld/mysqld.sock이 존재할 수도 있고 존재하지 않을 수도 있습니다. 양말 파일이 없으면 스크립트가 종료되고 시스템이 제대로 초기화되지 않습니다.

나는 openvpn.service 지시문을 로 변경하고 After=network.target mysql.service실행하면 systemctl daemon-reload문제가 해결될 것이라고 생각했습니다. 그러나 ls -lh /var/run/mysqld/mysqld.sock스크립트 시작 부분에 추가했는데 --up여전히 가끔 ls: cannot access '/var/run/mysqld/mysqld.sock': No such file or directory.

내 생각에 systemd는 mysqld가 로딩을 완료했는지 여부를 결정하기 위해 sock 파일을 사용하는 것이 아니라 sock 파일이 생성되기 전에 발생하는 몇 가지 기준을 사용하는 것 같습니다.

sock 파일이 생성될 때까지 mysql.service가 시작된 것으로 인식하지 못하도록 systemd에 지시하는 방법이 있습니까?

답변1

나도 같은 문제가 있었는데, mysql이 시작된 후에 다른 서비스를 시작하세요

먼저 서비스를 비활성화합니다.

systemctl disable rfid-server

그 후 rfid-server.service 파일을 수정했습니다.

[Unit]
Description=rfid server
After=mysql.service

[Service]
ExecStart=/opt/rfid-server-service/deploy/start.sh

[Install]
WantedBy=multi-user.target mysql.service

그리고 내 서비스를 다시 활성화합니다.

systemctl enable /complete/path/to/service

Created symlink from /etc/systemd/system/multi-user.target.wants/rfid-server.service to /opt/rfid-server-service/rfid-server.service.
Created symlink from /etc/systemd/system/mysql.service.wants/rfid-server.service to /opt/rfid-server-service/rfid-server.service.
Created symlink from /etc/systemd/system/rfid-server.service to /opt/rfid-server-service/rfid-server.service.

보시다시피 mysql.service.wants에 대한 심볼릭 링크를 생성합니다.

답변2

ConditionPathExists서비스 파일에 검사를 추가해야 할까요 ?

systemd의 인용문이 있습니다.선적 서류 비치:

ConditionPathExists=를 사용하면 장치가 시작되기 전에 파일 존재 조건이 확인됩니다. 지정된 절대 경로 이름이 없으면 조건이 실패합니다. ConditionPathExists=에 전달된 절대 경로 이름 앞에 느낌표("!")가 붙으면 테스트가 무효화되고 경로가 존재하지 않는 경우에만 장치가 시작됩니다.

관련 정보