BASH/Linux :Всегда выполнять команду или повторять команду?

Если Perl является опцией, вы можете использовать его модульIO::Socketдля проверки подключения к определенному хосту и порту; сценарий ниже hard -кодирует TCP как протокол (, который будет использовать telnet):

#!/usr/bin/perl -w

# tries to connect to the given IP and port (tcp)

use strict;
use IO::Socket;

my $desthost = shift or die "Usage: $0 host port\n";
my $destport = shift or die "Usage: $0 host port\n";

gethostbyname($desthost) || die "Invalid host given\n";

my $handle = IO::Socket::INET->new(
        PeerAddr => $desthost,
        PeerPort => $destport,
        Proto    => 'tcp')
    or die "can't connect to $desthost:$destport: $!\n";
close $handle;
print "Success!\n"

Пример вывода из закрытого порта:

$./above-script kafka02 6667
can't connect to kafka02:6667: Connection refused

Пример вывода из открытого порта:

$./above-script kafka02 4200
Success!

0
11.01.2021, 23:41
1 ответ

Вы можете использовать systemd

Создать файл например/etc/systemd/system/yourapplication.service

[Unit]
Description=Your Super application
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service

StartLimitIntervalSec=500
StartLimitBurst=5

[Service]
Restart=on-failure
RestartSec=5s

ExecStart=/path/to/application

[Install]
WantedBy=multi-user.target

Или старый способ — запустить приложение с помощью init.

Добавить в скрипт инициализации строку

ap:2345:respawn:/bin/sh /somewhere/start-app

С adid вашего сервиса (максимум 2 буквы)

2345Список уровней выполнения, к которым применяется эта запись.

  • 2 Мульти -Пользовательский режим Не настраивает сетевые интерфейсы и не запускает демоны.
  • 3 Мульти -Пользовательский режим с сетевым подключением Нормальный запуск системы.
  • 4 Не определено Не используется/Определяется пользователем -
  • 5 X11 Как уровень запуска 3 + диспетчер отображения (X)

respawnдля действия

затем команда для запуска

1
18.03.2021, 22:37

Теги

Похожие вопросы