방금 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
위와 같이 부팅하면 동일한 오류가 발생합니다. mailq
cron 스크립트를 처리 할 때 네트워크 / DNS가 준비되지 않았기 때문에 이메일도 수신됩니다 . 시작한지 몇 분 후에 올바르게 전송됩니다.
누구나 서비스가 올바른 순서로 실행되도록하여 올바르게 처리 할 수 있습니까? 부팅 속도가 너무 빠르며 이상적으로는 한 가지 서비스를 시작하는 중입니다 ... 기다립니다 ... 새로운 서비스를 시작합니다 ... 기다리십시오.
그것이 systemd
내 문제 인지 확실하지 않다는 것을 명심하십시오 -그것은 내가 그물에서 읽을 수있는 것에 대한 나의 이론 일뿐입니다.
/etc/default/rc*
Requires=network.target
위의 단위에 추가하십시오 .
Requires=network.target
된 후에도 여전히 동일한 문제/lib/systemd/system/crond.service
grep -i concurrency /etc/default/rcS
? 의 출력을 게시 할 수 있습니까? 내 init 시스템을 섞어 놓고있을 수도 있지만 프로세스가 서로 완료되기를 기다리는 지 여부를 제어하는 것을 기억합니다.