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