Я только что обновил 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как сеть / DNS не готова при обработке cron-скриптов. Через несколько минут после запуска они отправляются правильно.
Может ли кто-нибудь помочь сделать это правильно, убедившись, что службы работают в правильном порядке? Кажется очень неправильным, что это такая быстрая загрузка, и в идеале это было сделано по старому доброму пути: «запуск одной услуги ... ожидание ... запуск новой службы ... ожидание ... и так далее).
Обратите внимание, что я не уверен, systemdчто это моя проблема - это всего лишь моя теория о том, что я могу прочитать из сети.
/etc/default/rc*
Requires=network.targetк единицам выше.
Requires=network.targetв/lib/systemd/system/crond.service
grep -i concurrency /etc/default/rcS? Возможно, я путаю мои системы инициализации, но, похоже, я помню, что контролирует, ожидают ли процессы завершения друг друга.