Я щойно оновив з 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? Я, можливо, змішую свої системи init, але, здається, я пам'ятаю, що вони контролюють, чи очікують, що процеси закінчать один одного.