LinuxForum.Fans
Тема

Удаленное управление демонами

Автор: opryatniyav 195 сообщений 20484 просмотров
#192771
Lupo Alberto написал:
Написать соответствующий скрипт, в котором учесть всё вам необходимое, в том числе отправка сообщений об ошибке на e-mail.

Если честно то в написании сриптов я полный ламер некогда этого не делал помогите если не трудно
отчет об ошибках должен сам скрипт детектить
или же ssh:
LogLevel
Устанавливает так называемый, уровень логгирования событий. сервера sshd.
Допустимые значения: QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3.
Значения DEBUG и DEBUG1 являются эквивалентами. Значения DEBUG*, использовать не рекомендуется, так нарушается конфиденциальность пользователей.
По-умолчанию: INFO.
SyslogFacility
Код сообщений для протокола syslog.
Возможные значения: DAEMON, USER, AUTH, LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7.
По-умолчанию: AUTH.

это оно ? только я не могу понять значения которые здесь написаны? INFO и AUTH мне подойдет
и где смотреть эти логи и как автоматизировать отчет по почте?
простите если сильно много вопросов задаю я просто недавно общаюсь с серверами линукс

вот еще нарыл pdsh (Parallel Distributed Shell) случайно не сталкивались с данной прикладухой? стоит обратить внимание на нее?

#192772
Lupo Alberto написал:
Скорее всего графический режим нужен только на управляющем компьютере.

да но у меня на рабочей тачке винда стоит а на всех серверах консоль

#192776
opryatniyav написал:
да но у меня на рабочей тачке винда стоит

Есть PuTTY wink

#192778

так с помощью патти я и подключаюсь к этим серверам только ж у меня обратно идет консольный режим а clusterssh работает только на линуксе в графическом

#192780

opryatniyav, не уверен, что для вас так уж будут важны информационные и отладочные сообщения ssh.
Для вас важнее получить отчёт о выполнении скриптом задачи.
Так описание вами задачи:

opryatniyav написал:
Объясню ситуацию по подробнее есть много серверов 15 шт на каждом из них нужно стопарить демона JBOSS потом заливать ear на эти сервера после удачного выполнения нужно стартовать JBOSS если же что то пошло не так маячить на почту

...мне ни о чём не говорит — я с этим не сталкивался. Но отчёт о выполнении скриптом каждого этапа (останов сервисов, загрузка приложения, восстановление сервиса) легко логировать и отослать на почту.

#192787
Denlookh написал:
opryatniyav, кстати, демонов стопить можно и не удаленно и бэкапить не с удаленной машины. Все это можно делать по крону локально. А потом просто забирать архив. .

Так я про то и говорил.
Запуск скрипта из крона лучше с перенаправлением вывода в файл, чтобы потом глянуть можно было.
типа
[console]$ sh /путь/кмоему/скрипту/скрипт.sh >> отчет.log[/console]
в самом скрипте в echo дату и время пихнуть...

#193940

люди добрые помогите написать срипт под мои задачи

1)удаленно тушим службу JBOSS ssh 10.77.*.* /etc/init.d/jboss stop (авторизация по ключам)

2)при удачном выполнении копируем файл с заменой с клиента на сервер scp /u02/file 10.77.*.*:/remotedir/file

3)если службу не удалось потушить то нужно ее закилить по номеру процесса
вот только как это сделать ума не приложу

4)запустить службу на удаленном сервере ssh 10.77.*.* /etc/init.d/jboss stop

Подскажите пожалуйста как все это можно собрать в кучу с помощью SHELL скриптов

заранее благодарен за любую помощь

#193978
opryatniyav написал:
люди добрые помогите написать срипт под мои задачи

1)удаленно тушим службу JBOSS ssh 10.77.*.* /etc/init.d/jboss stop (авторизация по ключам)

Лучше: локально тушим сервер kill -9 'cat /path/to/jboss.pid'

opryatniyav написал:

2)при удачном выполнении копируем файл с заменой с клиента на сервер scp /u02/file 10.77.*.*:/remotedir/file

Копируем локально с удаленной машины файл. Права и прочее выставляем на директорию правильно. Это не от рута scp запускать. Например 644 на файл и забирать его wget. Хотя можно и дохленького юзера и с авторизацией по ключу.

opryatniyav написал:

3)если службу не удалось потушить то нужно ее закилить по номеру процесса
вот только как это сделать ума не приложу

Лучше сразу килять по пиду.

opryatniyav написал:

4)запустить службу на удаленном сервере ssh 10.77.*.* /etc/init.d/jboss stop

Подскажите пожалуйста как все это можно собрать в кучу с помощью SHELL скриптов

заранее благодарен за любую помощь

Стартуем через init.d скрипт.
Пишется скрипт, запихивается в крон.
Так проще и секурнее, кроме того можно вести локальный лог того, что выплюнуло на stderr/stdout

#194095

Все будет делаться с под рута
сразу килять по пиду не рекомендуется

вот что я набросал
ssh 10.77.*.* /etc/init.d/jboss stop || kill -SIGKILL 'cat /path/to/jboss.pid' && scp /u02/file 10.77.*.*:/u02/file && ssh 10.77.*.* /etc/init.d/jboss start

& асинхронное (фоновое) выполнение предшествующей команды;
&& выполнение последующей команды при условии нормального завершения предыдущей, иначе игнорировать;
|| выполнение последующей команды при ненормальном завершении предыдущей, иначе игнорировать.

вопрос где тут поставить скобочки чтоб это нормально работало?


скрипты некогда в жизни не писал простите за глупые вопросы если что

#194096

если не сложно скиньте похожий пример скрипта с небольшим описанием чтоб мне было легче изучить это

#194099

Вместо конструкции kill -SIGKILL 'cat /path/to/jboss.pid' можно использовать команду pkill, входящую в пакет procps.
Покажите сам скрипт /etc/init.d/jboss — возможно, задачу гарантированной остановки сервиса можно решить проще.

#194110

Все будет делаться с под рута
сразу килять по пиду не рекомендуется

вот что я набросал
ssh 10.77.*.* /etc/init.d/jboss stop || kill -SIGKILL 'cat /path/to/jboss.pid' && scp /u02/file 10.77.*.*:/u02/file && ssh 10.77.*.* /etc/init.d/jboss start

& асинхронное (фоновое) выполнение предшествующей команды;
&& выполнение последующей команды при условии нормального завершения предыдущей, иначе игнорировать;
|| выполнение последующей команды при ненормальном завершении предыдущей, иначе игнорировать.

вопрос где тут поставить скобочки чтоб это нормально работало?


скрипты некогда в жизни не писал простите за глупые вопросы если что

#194112

вот конфиг /etc/init.d/jboss

Показать

#! /bin/sh
# Copyright (c) 1995-2003 SuSE Linux AG, Nuernberg, Germany.
# All rights reserved.
#
# Author: Petr Mladek
# Please send feedback to http://www.suse.de/feedback/
#
# /etc/init.d/jboss
# and its symbolic link
# /usr/sbin/rcjboss
#
# LSB compatible service control script; see http://www.linuxbase.org/spec/
#
### BEGIN INIT INFO
# Provides: jboss
# Required-Start: $syslog $remote_fs
# X-UnitedLinux-Should-Start: $named $syslog $time
# Required-Stop: $syslog $remote_fs
# X-UnitedLinux-Should-Stop: $named $syslog $time
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: JBoss Application Server
# Description: Start jboss to get the fully featured Java application server running.
### END INIT INFO


jbossIsRunning()
{
jboss_ps_log=`mktemp /var/tmp/jboss-ps.log.XXXXXX`
ps aux --cols 1024 >"$jboss_ps_log"
jboss_is_running="false"
if grep org.jboss.Main "$jboss_ps_log" >/dev/null 2>/dev/null ; then
jboss_is_running="true"
fi
rm -f "$jboss_ps_log"
test "$jboss_is_running" = "true"
}

# Check for missing binaries and configuration
# Note: Special treatment of stop for LSB conformance
JBOSS_CONFIG=/etc/sysconfig/j2ee
test -r "$JBOSS_CONFIG" || { echo "$JBOSS_CONFIG not existing";
if [ "$1" = "stop" ]; then exit 0;
else exit 6; fi; }

# Read config
. "$JBOSS_CONFIG"

# check binaries
JBOSS_START_BIN=$JBOSS_HOME/bin/run.sh
JBOSS_STOP_BIN=$JBOSS_HOME/bin/shutdown.sh
test -x $JBOSS_START_BIN || { echo "$JBOSS_START_BIN not installed";
if [ "$1" = "stop" ]; then exit 0;
else exit 5; fi; }
test -x $JBOSS_STOP_BIN || { echo "$JBOSS_STOP_BIN not installed";
if [ "$1" = "stop" ]; then exit 0;
else exit 5; fi; }

# check configuration
test -d "$JBOSS_HOME/server/$JBOSS_CONFIG" || { echo "$JBOSS_HOME/server/$JBOSS_CONFIG not existing";
if [ "$1" = "stop" ]; then exit 0;
else exit 6; fi; }

# Source LSB init functions
# providing start_daemon, killproc, pidofproc,
# log_success_msg, log_failure_msg and log_warning_msg.
# This is currently not used by UnitedLinux based distributions and
# not needed for init scripts for UnitedLinux only. If it is used,
# the functions from rc.status should not be sourced or used.
#. /lib/lsb/init-functions

# Shell functions sourced from /etc/rc.status:
# rc_check check and set local and overall rc status
# rc_status check and set local and overall rc status
# rc_status -v be verbose in local rc status and clear it afterwards
# rc_status -v -r ditto and clear both the local and overall rc status
# rc_status -s display "skipped" and exit with status 3
# rc_status -u display "unused" and exit with status 3
# rc_failed set local and overall rc status to failed
# rc_failed <num> set local and overall rc status to <num>
# rc_reset clear both the local and overall rc status
# rc_exit exit appropriate to overall rc status
# rc_active checks whether a service is activated by symlinks
# rc_splash arg sets the boot splash screen to arg (if active)
. /etc/rc.status

# set path to a valid Java SDK
. setJava --devel --version 1.3

# Reset status of this service
rc_reset

# Return values acc. to LSB for all commands but status:
# 0 - success
# 1 - generic or unspecified error
# 2 - invalid or excess argument(s)
# 3 - unimplemented feature (e.g. "reload")
# 4 - user had insufficient privileges
# 5 - program is not installed
# 6 - program is not configured
# 7 - program is not running
# 8--199 - reserved (8--99 LSB, 100--149 distrib, 150--199 appl)
#
# Note that starting an already running service, stopping
# or restarting a not-running service as well as the restart
# with force-reload (in case signaling is not supported) are
# considered a success.

case "$1" in
start)
echo -n "Starting jboss ($JBOSS_CONFIG)"
## Start daemon with startproc(8). If this fails
## the return value is set appropriately by startproc.

# NOTE: startproc return 0, even if service is
# already running to match LSB spec.
if jbossIsRunning ; then
rc_failed 0
else
# try to fix permissions
test -d "$JBOSS_HOME/server/${JBOSS_CONFIG:-default}" && \
chown -R --dereference root:root "$JBOSS_HOME/server/${JBOSS_CONFIG:-default}" 2>/dev/null || true
# define options and start server
JBOSS_START_OPTIONS=""
test -n "$JBOSS_CONFIG" && JBOSS_START_OPTIONS="-c $JBOSS_CONFIG"
chown -R root:root "$JBOSS_HOME/server/$JBOSS_CONFIG"
(
# FIXME: jboss want to save some temporary files in the directory
# which it is started from
cd /var/tmp/
su root -s /bin/bash -c "$JBOSS_START_BIN $JBOSS_START_OPTIONS" >/dev/null 2>&1 &
)
# wait 60 sec for stop at maximum
wait_sec=60
while [ "$wait_sec" != "0" ] ; do
sleep 1
if jbossIsRunning ; then
# the jboss server is stoped, end the loop
wait_sec=0
break
fi
wait_sec=$((wait_sec -1))
done
# check the final status
if jbossIsRunning ; then
rc_failed 0
else
rc_failed 7
fi
fi
# Remember status and be verbose
rc_status -v
;;
stop)
echo -n "Shutting down jboss "
if jbossIsRunning ; then
su root -s /bin/bash -c "$JBOSS_STOP_BIN -S" >/dev/null 2>&1
# wait 60 sec for stop at maximum
wait_sec=60
while [ "$wait_sec" != "0" ] ; do
sleep 1
if ! jbossIsRunning ; then
# the jboss server is stoped, end the loop
wait_sec=0
break
fi
wait_sec=$((wait_sec -1))
done
# check the final status
if jbossIsRunning ; then
rc_failed 1
else
rc_failed 0
fi
else
rc_failed 0
fi
# Remember status and be verbose
rc_status -v
;;
try-restart|condrestart)
## Do a restart only if the service was active before.
## Note: try-restart is now part of LSB (as of 1.9).
## RH has a similar command named condrestart.
if test "$1" = "condrestart"; then
echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}"
fi
$0 status
if test $? = 0; then
$0 restart
else
rc_reset # Not running is not a failure.
fi
# Remember status and be quiet
rc_status
;;
restart)
## Stop the service and regardless of whether it was
## running or not, start it again.
$0 stop
$0 start

# Remember status and be quiet
rc_status
;;
force-reload)
## Signal the daemon to reload its config. Most daemons
## do this on signal 1 (SIGHUP).
## If it does not support it, restart.

echo -n "Reload service jboss "
$0 try-restart
rc_status
;;
reload)
## Like force-reload, but if daemon does not support
## signaling, do nothing (!)

rc_failed 3
rc_status -v
;;
status)
echo -n "Checking for service jboss "
## Check status with checkproc(8), if process is running
## checkproc will return with exit status 0.

# Return value is slightly different for the status command:
# 0 - service up and running
# 1 - service dead, but /var/run/ pid file exists
# 2 - service dead, but /var/lock/ lock file exists
# 3 - service not running (unused)
# 4 - service status unknown :-(
# 5--199 reserved (5--99 LSB, 100--149 distro, 150--199 appl.)

if jbossIsRunning ; then
rc_failed 0
else
rc_failed 3
fi

# NOTE: rc_status knows that we called this init script with
# "status" option and adapts its messages accordingly.
rc_status -v
;;
probe)
## Optional: Probe for the necessity of a reload, print out the
## argument to this init script which is required for a reload.
## Note: probe is not (yet) part of LSB (as of 1.9)
;;
*)
echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}"
exit 1
;;
esac
rc_exit
#194360
Lupo Alberto написал:
Вместо конструкции kill -SIGKILL 'cat /path/to/jboss.pid' можно использовать команду pkill, входящую в пакет procps.

спасибо за подсказку помогло убиваю процесс по имени

у меня получился такой скриптик

[console]
#!/bin/bash
ssh 10.77.*.* /etc/init.d/jboss stop || pkill -9 java && scp /u02/file 10.77.*.*:/u02/file && ssh 10.77.*.* /etc/init.d/jboss start
[/console]

помогите настроить правильное логирование для ошибок

#194369

opryatniyav, в кроне script.sh 2>&1 > /var/log/script.log

#194372

а в самом скрипте нельзя прописать ету команду ?

#194373

вот так ?
#!/bin/bash
ssh 10.77.*.* /etc/init.d/jboss stop || pkill -9 java && scp /u02/file 10.77.*.*:/u02/file && ssh 10.77.*.* /etc/init.d/jboss start 2>&1 > /var/log/script.log

#194432

opryatniyav, это будет верно для последней команды. А в чем трабл кунструкцию в крон запихнуть?

#194487

дело в том что этот скрипт не будет запускаться на автомате через крон
он будет запускаться по необходимости
поэтому нужно делать логи в скрипте

#!/bin/bash
ssh 10.77.*.* /etc/init.d/jboss stop 2>&1 > /var/log/script.log || pkill -9 java 2>&1 > /var/log/script.log && scp /u02/file 10.77.*.*:/u02/file 2>&1 > /var/log/script.log && ssh 10.77.*.* /etc/init.d/jboss start 2>&1 > /var/log/script.log

это правильно ?

#194669

Всем спасибо за подсказки
но есть еще вопросик
подскажите пожалуйста как в данном скрипте настроить логирование ошибок и отправку их по почте

#!/bin/bash
ssh 10.77.*.* /etc/init.d/jboss stop || pkill -9 java && scp /u02/file 10.77.*.*:/u02/file && ssh 10.77.*.* /etc/init.d/jboss

Войдите или зарегистрируйтесь, чтобы ответить.