CentOS 6.5から7.0にアップグレードしたばかりですsystemd
が、おそらく新しいもので問題が発生しているので、あまり満足していません。それは単に起動が速すぎて、プロセスを非同期に起動し、サービスの依存関係を台無しにしているだけのようです。
たとえばcrond
、再起動後にトリガーされるいくつかのスクリプトのセットアップがあります。
@reboot /root/scripts/check_gmail.sh
@reboot /root/scripts/start_gps_listener.sh
これにより、あらゆる種類の奇妙なエラーが発生します(そのうちの1つだけが表示されます)。
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
ました[Unit]
(で確認できますsystemctl list-dependencies
)。理想的には、すべてのサービスはMySQLが稼働するまで待機します。
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の準備ができていないため、メールも受信します。起動後数分で正しく送信されます。
誰もがサービスが正しい順序で起動されることを確認することによってこれを正しくするのを助けることができますか?それが非常に高速なブートであり、理想的には古き良き方法であることが非常に間違っているようです。「1つのサービスを起動しています...
systemd
それが私の問題であるかどうかはわかりませんが、これはネットから読み取れるものについての私の理論にすぎません。
/etc/default/rc*
Requires=network.target
上記のユニットに追加してみてください。
Requires=network.target
にして/lib/systemd/system/crond.service
grep -i concurrency /etc/default/rcS
か?私はinitシステムを混同しているかもしれませんが、プロセスがお互いに終了するのを待つかどうかを制御することを思い出したようです。