Właśnie zaktualizowałem CentOS 6.5 do 7.0 i nie jestem zbyt szczęśliwy, ponieważ nowy systemdprawdopodobnie przysparza mi problemów. Wygląda na to, że po prostu uruchamia się zbyt szybko, asynchronicznie uruchamia procesy i psuje zależności serwisowe.
Na przykład mam kilka skryptów, w crondktórych uruchamiane są po restarcie:
@reboot /root/scripts/check_gmail.sh
@reboot /root/scripts/start_gps_listener.sh
Powoduje to wszelkiego rodzaju dziwne błędy (pokazujące tylko jeden z nich):
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)
W powyższym piszę do gniazda TCP. Jest dla mnie całkiem jasne, że crondjest uruchamiany zanim sieć zostanie poprawnie zainicjowana jako network is unreachable.
To samo dotyczy Apache i MySQL (MariaDB). MySQL uruchamia się dość wolno (dużo danych), co oznacza, że zarówno Apache, jak i wiele moich crondskryptów startowych zawodzi, ponieważ baza danych MySQL nie działa podczas wywoływania skryptów.
Próbowałem skonfigurować zależności, ale bez powodzenia; Dołączyłem networki mysqlusługi [Unit](jak widać z systemctl list-dependencies). Idealnie wszystkie usługi czekają na uruchomienie 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
Podczas uruchamiania przy użyciu powyższego otrzymuję te same błędy. Dostaję również e-maile, mailqponieważ sieć / DNS nie jest gotowa podczas przetwarzania skryptów cron. Kilka minut po uruchomieniu są wysyłane poprawnie.
Czy ktoś może pomóc w uzyskaniu tego, upewniając się, że usługi są uruchamiane we właściwej kolejności? Wydaje się bardzo błędne, że tak szybko się uruchamia i idealnie zrobił to po staremu, „uruchamiając jedną usługę ... czekaj ... uruchamiając nową usługę ... czekaj ... itd.).
Zauważ, że nie jestem pewien, czy to jest systemdmój problem - to tylko moja teoria tego, co mogę czytać z sieci.
/etc/default/rc*
Requires=network.targetdo powyższych jednostek.
Requires=network.targetdo/lib/systemd/system/crond.service
grep -i concurrency /etc/default/rcS? Być może mieszam swoje systemy inicjujące, ale wydaje mi się, że pamiętam, że kontroluje to, czy procesy będą czekać na zakończenie innych.