Acabo de actualizar de CentOS 6.5 a 7.0 y no estoy muy contento ya que la nueva systemd
probablemente me está dando problemas. Parece que simplemente se está iniciando demasiado rápido, iniciando los procesos de forma asincrónica y arruinando las dependencias del servicio.
Por ejemplo, tengo algunas configuraciones de scripts crond
que se activan después de un reinicio:
@reboot /root/scripts/check_gmail.sh
@reboot /root/scripts/start_gps_listener.sh
Esto da como resultado todo tipo de errores extraños (solo muestra uno de ellos):
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)
En lo anterior, estoy escribiendo en un socket TCP. Para mí es bastante claro que crond
se inicia antes de que la red se inicialice correctamente como network is unreachable
.
Lo mismo ocurre con Apache y MySQL (MariaDB). MySQL es bastante lento para el inicio (muchos datos), lo que significa que tanto Apache como muchos de mis crond
scripts de inicio están fallando ya que la base de datos MySQL no se está ejecutando cuando se llaman los scripts.
He intentado configurar dependencias pero sin suerte; He agregado network
y mysql
servicios a [Unit]
(como se ve con systemctl list-dependencies
). Idealmente, todos los servicios esperan hasta que MySQL esté en funcionamiento:
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
Al arrancar con lo anterior, obtengo los mismos errores. También recibo los correos electrónicos mailq
ya que la red / DNS no está lista al procesar cron-scripts. Unos minutos después del inicio, se envían correctamente.
¿Alguien puede ayudar a hacer esto bien asegurándose de que los servicios se activen en el orden correcto? Parece muy incorrecto que sea un arranque tan rápido e idealmente lo hizo de la manera tradicional, "lanzando un servicio ... espera ... lanzando un nuevo servicio ... espera ... etc.".
Tenga en cuenta que no estoy seguro de que systemd
ese sea mi problema, es solo mi teoría de lo que puedo leer de la red.
/etc/default/rc*
Requires=network.target
a las unidades de arriba.
Requires=network.target
en/lib/systemd/system/crond.service
grep -i concurrency /etc/default/rcS
? Puede que esté mezclando mis sistemas de inicio, pero parece recordar que controla si los procesos esperan el uno al otro para terminar.