Original: Miss Sister Taste (ID de cuenta pública de WeChat: xjjdog), bienvenido a compartir, guarde esta información para reimprimirla.
Linux es muy seguro, confiable y huele como una chica morena, lo que significa que también es suave.
Ejecutar un servicio en Linux es tan tranquilizador como que un niño esconde ropa de mujer en una caja de seguridad. Su estabilidad y seguridad pueden hacer que las personas duerman cómodamente.
SPOF, es el famoso problema de punto único. Dado que xjjdog odia mostrar las características de las abreviaturas, escribí su nombre completo aquí: punto único de falla.
Un Linux es un solo Linux, por lo que los servicios que se ejecutan en él tendrán un único punto de problemas. La resolución de problemas de un solo punto generalmente se puede hacer a través de clústeres, pero también a través del lujo de los nodos de sombra.
Pero no importa cómo lo hagamos, todos esperamos que cierto proceso que se ejecuta en Linux pueda iniciarse automáticamente cuando se inicia Linux y cerrarse automáticamente cuando se apaga Linux. Queremos que nuestras aplicaciones, como la carne y hueso de Linux, se instalen en el corazón de Linux.
procedimiento de preparación
Durante mucho tiempo, solía supervisor
hacer este tipo de cosas. Pero desafortunadamente, supervisor no es un software preinstalado de Linux, está escrito en python y necesita instalar muchos paquetes de dependencia. En un entorno empresarial donde los permisos de red se ajustan gradualmente, el uso de un supervisor se sumará a sus problemas.
Sí, no es que el supervisor sea malo, es que es demasiado engorroso. Las solicitudes frecuentes de permisos de red pueden ser frustrantes e incluso abrumadoras.
La siguiente mejor cosa es systemd.
Para ilustrar cómo usarlo, preparamos un pequeño programa Java.
import com.sun.net.httpserver.HttpContext;
import com.sun.net.httpserver.HttpServer;
import java.io.OutputStream;
import java.net.InetSocketAddress;
public class Runner {
public static void main(String[] args) throws Exception{
HttpServer server = HttpServer.create(new InetSocketAddress(14000), 0);
HttpContext context = server.createContext("/");
context.setHandler(exchange -> {
try {
String response = "Ojbk!";
exchange.sendResponseHeaders(200, response.getBytes().length);
OutputStream os = exchange.getResponseBody();
os.write(response.getBytes());
os.close();
} catch (Exception ex) {
ex.printStackTrace();
}
});
server.start();
}
}
Este código iniciará un servidor Http en el puerto 14000, y cada vez que acceda a él, generará Ojbk. .
curl http://localhost:14000
Convertir el programa en un servicio
Para que el programa anterior forme parte del sistema, es necesario repararlo.
[Unit]
Description=My First Java Service
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=root
ExecStart=/usr/bin/env java /opt/Runner
[Install]
WantedBy=multi-user.target
Lo más importante es ExecStart, que configura el comando exacto que desea ejecutar. Por supuesto, aquí somos un archivo de clase simple.
Asigne un nombre al archivo, por ejemplo xjjdogfirstjava.service
, y coloque el archivo en el /etc/systemd/system/
directorio.
Para iniciar este servicio, simplemente ejecute el siguiente comando directamente.
systemctl start xjjdogfirstjava
Si no puede encontrar el servicio que acaba de crear, recuerde volver a cargarlo.
systemctl daemon-reload
Si desea que comience con Linux, puede ejecutar enable para crear un enlace.
systemctl enable xjjdogfirstjava
Además de estos dos, desactivar, detener y reiniciar también son comandos estándar.
Observe que hay 2 líneas en el archivo de configuración.
Restart=always
RestartSec=1
Muestra que cada vez que el programa termina de manera anormal, el proceso se reiniciará automáticamente y el intervalo de reinicio es de 1 segundo.
alguna configuracion mas
Notamos que en el archivo de configuración anterior, hay After=network.target
palabras. Indica que el servicio xjjdogfirstjava se iniciará solo cuando se inicie MySQL, es decir, se fuerza la especificación de una dependencia.
Sin embargo, cuando muchos socios pequeños usan la configuración anterior, a menudo descubren que después de que el servicio se reinicia automáticamente varias veces, nunca se reinicia nuevamente.
Espera, ¿no usamos el parámetro Restart=always?
Esto se debe al hecho de que systemd tiene dos umbrales integrados de forma predeterminada.
StartLimitBurst=5
StartLimitIntervalSec=10
Cuando establece StartLimitIntervalSec en 0, finalmente se logra el propósito y nuestro programa siempre puede fallar y reiniciar todo el tiempo.
No obstante, es una buena práctica mantener un intervalo de reinicio. Porque cuando se reinician la mayoría de los servicios, se producirá un aumento en los recursos del servidor. Si no desea que su servidor emita una alarma, no lo oprima.
Final
Este es systemd, un programa integrado en Linux. Con él, sus aplicaciones finalmente pueden integrarse con Linux, y el tiempo pasa.
Sobre la autora: Miss Sister Taste (xjjdog), una cuenta pública que no permite a los programadores tomar desvíos. Centrarse en la infraestructura y Linux. Diez años de arquitectura, decenas de miles de millones de tráfico diario, discutiendo contigo el mundo de la alta concurrencia, brindándote un gusto diferente. Mi WeChat personal xjjdog0, bienvenido a agregar amigos para una mayor comunicación.
Lectura recomendada:
1. Juega Linux
2. Álbum Qué Sabor
3. bluetooth como un sueño
4. ¡Asesinato!
5. Arquitecto desconectado, dejando solo un guión
6. El BUG escrito por el arquitecto es inusual
7. ¡Algunos programadores son esencialmente un rebaño de ovejas!
Señorita hermana gusto
No envidies a los patos mandarines ni a los inmortales, solo ajusta una línea de código durante mucho tiempo.
346 contenido original