Можно использовать yum
сделать установку также.
$ yum --nogpgcheck localinstall *.rpm
Yum затем удостоверится, что зависимости все установлены прежде, чем попытаться установить. Это даже изучит предложенные .rpm файлы, которые Вы пытаетесь установить, чтобы удостовериться, что их зависимости удовлетворены.
В целом это обычно - плохая идея попытаться установить несколько .rpm файлов, использующих единственный rpm -ivh ...
. Лучше включать их всех в одну командную строку так, чтобы rpm
может проверить зависимости через весь набор .rpms также.
неткат на помощь... Netcat очень похож на telnet, но с несколькими дополнительными сумасшедшими опциями. Одной из особенностей использования в данном случае является -z, который просто проверяет, работает ли соединение. Наряду с переменной таймаута, вы можете попросить систему повторно проверить, прослушивает ли сервис.
У меня ssh включен локально, но не telnet.
$ nc -zw10 localhost 22
$ echo $?
0
$ nc -zw10 localhost 23
$ echo $?
1
И для большей ясности при тестировании... Это предполагает 2-х минутный тайм-аут, о котором вы упоминали ранее. Он проверяет 4 раза с тайм-аутом в полминуты каждый раз. Штампы даты, вероятно, были бы лучше, но это начало.
for i in {1..4}; do
nc -zw30 localhost 22
x=$?
[[ $x -eq 0 ]] && break
done
if [[ $x -eq 0 ]]; then
echo 'Service started successfully' >> ${log}
else
echo 'Service did not start within the specified timeout' >> ${log}
fi
start next service
Другой способ проверить состояние порта - использовать утилиту netstat
.
user@debian:~$ netstat -4 -l --tcp -p # Show programs listening to IPv4/TCP ports
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:53 *:* LISTEN 2389/named
tcp 0 0 *:22 *:* LISTEN 2936/sshd
tcp 0 0 *:5432 *:* LISTEN 2475/postgres
tcp 0 0 *:25 *:* LISTEN 2961/exim4
Здесь я вижу, что демоны DNS, SSH, PosgtreSQL и Mail работают, поскольку они прослушивают соответствующие порты. Более того, последний столбец сообщает мне, какое приложение прослушивает каждый конкретный порт.
Скрипт для проверки отдельной службы будет выглядеть так:
PORT=... the port we need to check ...
# Current time in seconds + 15 minutes
TRYUNTIL=$(( $(date +%s) - (60*15) ))
# 0 is down, 1 is up
STATUS=0
# While the service is still down and the current time is before our limit
while [[ (( $STATUS = 0 )) && (( $(date +%s) < $TRYUNTIL )) ]]
do
STATUS=$(netstat -4 -l --tcp | grep "*:$PORT" | wc -l)
# Lets not overload the system with constant checking,
# if the service is still down
if [[ $STATUS = 0 ]]; then
sleep 5s
fi
done