我刚刚从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的启动速度很慢(很多数据),这意味着Apache和我的许多crond
启动脚本都失败了,因为调用脚本时MySQL数据库未运行。
我试图建立依赖关系,但是没有任何运气。我已将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尚未准备好。启动后几分钟,它们将正确发送。
任何人都可以通过确保以正确的顺序启动服务来帮助实现这一目标?它启动如此之快似乎是非常错误的,理想情况下它是采用旧方法完成的,“启动一个服务...等等...启动新服务...等等...等等)。
请注意,我不确定这就是systemd
我的问题-这只是我从网上可以读取的内容的理论。
/etc/default/rc*
Requires=network.target
到上述单位。
Requires=network.target
中/lib/systemd/system/crond.service
grep -i concurrency /etc/default/rcS
吗?我可能会混合使用我的init系统,但我似乎还记得,它控制着进程是否彼此等待完成。