방금 CentOS 6.5에서 7.0으로 업그레이드했으며 새로운 기능 systemd으로 인해 문제가 발생할 수 있으므로 너무 행복하지 않습니다 . 단순히 너무 빨리 부팅하여 프로세스를 비동기식으로 시작하고 서비스 종속성을 강화하는 것 같습니다.
예를 들어 crond재부팅 후 트리거되는 몇 가지 스크립트 설정 이 있습니다.
@reboot /root/scripts/check_gmail.sh
@reboot /root/scripts/start_gps_listener.sh
이로 인해 모든 종류의 이상한 오류가 발생합니다 (그중 하나만 표시).
Warning: stream_socket_client(): unable to connect to tcp://192.168.20.4:4001
(Network is unreachable) in /root/scripts/check_gmail.php on line 137
ERROR: Network is unreachable (101)
위의 TCP 소켓에 쓰고 있습니다. crond네트워크가로 제대로 초기화되기 전에 시작된 것이 분명 합니다 network is unreachable.
Apache와 MySQL (MariaDB)도 마찬가지입니다. MySQL은 시작 속도가 매우 느립니다 (많은 데이터) crond. 스크립트가 호출 될 때 MySQL 데이터베이스가 실행되지 않기 때문에 Apache와 많은 시작 스크립트가 모두 실패합니다.
나는 의존성을 설정하려고 노력했지만 운이 없다. (와 같이)에 추가 network하고 mysql서비스했습니다 . 이상적으로 모든 서비스는 MySQL이 시작되어 실행될 때까지 기다립니다.[Unit]systemctl list-dependencies
vi /lib/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target network.service mysql.service
vi /lib/systemd/system/crond.service
[Unit]
Description=Command Scheduler
After=syslog.target auditd.service systemd-user-sessions.service time-sync.target network.service mysql.service
위와 같이 부팅하면 동일한 오류가 발생합니다. mailqcron 스크립트를 처리 할 때 네트워크 / DNS가 준비되지 않았기 때문에 이메일도 수신됩니다 . 시작한지 몇 분 후에 올바르게 전송됩니다.
누구나 서비스가 올바른 순서로 실행되도록하여 올바르게 처리 할 수 있습니까? 부팅 속도가 너무 빠르며 이상적으로는 한 가지 서비스를 시작하는 중입니다 ... 기다립니다 ... 새로운 서비스를 시작합니다 ... 기다리십시오.
그것이 systemd내 문제 인지 확실하지 않다는 것을 명심하십시오 -그것은 내가 그물에서 읽을 수있는 것에 대한 나의 이론 일뿐입니다.
/etc/default/rc*
Requires=network.target위의 단위에 추가하십시오 .
Requires=network.target된 후에도 여전히 동일한 문제/lib/systemd/system/crond.service
grep -i concurrency /etc/default/rcS? 의 출력을 게시 할 수 있습니까? 내 init 시스템을 섞어 놓고있을 수도 있지만 프로세스가 서로 완료되기를 기다리는 지 여부를 제어하는 것을 기억합니다.