Dos órdenes que suenan igual y hacen cosas distintas. Casi todos los «funcionaba hasta que reiniciamos» son esto.
- start: ejecútalo ahora. No dice nada de la próxima vez.
- enable: ejecútalo al arrancar. No lo arranca ahora.
- enable --now: las dos cosas, que es lo que usted quería decir casi siempre.
systemctl enable --now nginx
systemctl is-enabled nginx
systemctl is-active nginx
Leer el estado
systemctl status php8.3-fpm
- active (running): como se esperaba.
- active (exited): se ejecutó y terminó. Correcto para una tarea de una sola vez, incorrecto para un demonio.
- failed: se paró y no volvió. El motivo está en el diario.
- activating (auto-restart): está en bucle de caídas. Volver a reiniciarlo no servirá de nada.
Por qué falló
journalctl -u php8.3-fpm --since "1 hour ago" --no-pager | tail -40
reload, no restart
restart tira todas las conexiones en curso. reload relee la configuración y las conserva. Para un servidor web o una base de datos, haga reload salvo que el cambio necesite de verdad un reinicio, y compruebe antes la configuración:
nginx -t.Una unidad propia
# /etc/systemd/system/queue-worker.service
[Unit]
Description=Queue worker
After=network.target mariadb.service
[Service]
User=www-data
ExecStart=/usr/bin/php8.3 /var/www/site/worker.php
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now queue-worker
daemon-reload después de editar cualquier archivo de unidad. Sin eso, systemd sigue ejecutando la definición vieja y su cambio parece no haber hecho nada.