У меня есть сервер OpenERP, работающий на одном из моих серверов. Он запускается традиционным сценарием /etc/init.d/. Он использует базу данных PostgreSQL и каждый раз перезагружается после перезагрузки PostgreSQL.
Каждый раз, когда Ubuntu выпускает обновление безопасности для PostgreSQL, мой сервер OpenERP становится нефункциональным до тех пор, пока я ssh не запустится на сервер и не запустит вручную [ f2]. Я обычно забываю сделать это после того, как сделаю sudo apt-get upgrade.
Могу ли я настроить выскочку, чтобы сделать это для меня, каждый раз, когда postgresql перезапускается apt?
Чтобы уточнить первый вариант schkovich, вот простая модификация скрипта System V /etc/init.d/postgresql.
Поэтому всякий раз, когда postgres отправляется «start / restart» / «reload» / «force-restart», , Я отправляю событие «start-postgresql» перед выдачей команды, а «start-postgresql» после ее завершения. Аналогично, с «stop», я отправляю событие «stopping-postgresql» перед командой и «stop-postgresql» после его выдачи.
Я показываю только последний блок case (case "$1" in [...] esac at в нижней части сценария. Чтобы сделать изменения более четкими (в случае, если будущие версии postgres изменяют сценарий system-V, я выделил строки, которые нужно вставить, поставив их между #### BEGIN emit-upstart-event и #### END emit-upstart-event.
case "$1" in
start|stop|restart|reload)
if [ -z "`pg_lsclusters -h`" ]; then
log_warning_msg 'No PostgreSQL clusters exist; see "man pg_createcluster"'
exit 0
fi
#### BEGIN emit-upstart-event
case "$1" in
start|restart|reload)
initctl emit starting-postgresql
;;
stop)
initctl emit stopping-postgresql
;;
esac
#### END emit-upstart-event
for v in $versions; do
$1 $v || EXIT=$?
done
#### BEGIN emit-upstart-event
case "$1" in
start|restart|reload)
initctl emit started-postgresql
;;
stop)
initctl emit stopped-postgresql
;;
esac
#### END emit-upstart-event
exit ${EXIT:-0}
;;
status)
LS=`pg_lsclusters -h`
# no clusters -> unknown status
[ -n "$LS" ] || exit 4
echo "$LS" | awk 'BEGIN {rc=0} {if (match($4, "down")) rc=3; printf ("%s/%s (port %s): %s\n", $1, $2, $3, $4)}; END {exit rc}'
;;
force-reload)
#### BEGIN emit-upstart-event
initctl emit starting-postgresql
#### END emit-upstart-event
for v in $versions; do
reload $v
done
#### BEGIN emit-upstart-event
initctl emit started-postgresql
#### END emit-upstart-event
;;
*)
echo "Usage: $0 {start|stop|restart|reload|force-reload|status} [version ..]"
exit 1
;;
esac
Если вы хотите обрабатывать перезапуск со всеми соответствующими сигналами (путем разделения перезапуска на команды остановки и запуска), вы можете выполнить:
case "$1" in
restart)
### HANDLING restart as a stop event and then a start event.
if [ -z "`pg_lsclusters -h`" ]; then
log_warning_msg 'No PostgreSQL clusters exist; see "man pg_createcluster"'
exit 0
fi
initctl emit stopping-postgresql
for v in $versions; do
stop $v || EXIT=$?
done
initctl emit stopped-postgresql
initctl emit starting-postgresql
for v in $versions; do
start $v || EXIT=$?
done
initctl emit started-postgresql
### END HANDLING restart separately
start|stop|reload)
if [ -z "`pg_lsclusters -h`" ]; then
log_warning_msg 'No PostgreSQL clusters exist; see "man pg_createcluster"'
exit 0
fi
#### BEGIN emit-upstart-event
case "$1" in
start|reload)
initctl emit starting-postgresql
;;
stop)
initctl emit stopping-postgresql
;;
esac
#### END emit-upstart-event
for v in $versions; do
$1 $v || EXIT=$?
done
#### BEGIN emit-upstart-event
case "$1" in
start|reload)
initctl emit started-postgresql
;;
stop)
initctl emit stopped-postgresql
;;
esac
#### END emit-upstart-event
exit ${EXIT:-0}
;;
status)
LS=`pg_lsclusters -h`
# no clusters -> unknown status
[ -n "$LS" ] || exit 4
echo "$LS" | awk 'BEGIN {rc=0} {if (match($4, "down")) rc=3; printf ("%s/%s (port %s): %s\n", $1, $2, $3, $4)}; END {exit rc}'
;;
force-reload)
#### BEGIN emit-upstart-event
initctl emit starting-postgresql
#### END emit-upstart-event
for v in $versions; do
reload $v
done
#### BEGIN emit-upstart-event
initctl emit started-postgresql
#### END emit-upstart-event
;;
*)
echo "Usage: $0 {start|stop|restart|reload|force-reload|status} [version ..]"
exit 1
;;
esac
Я написал сценарий, в котором я создал функцию -system-update, которая останавливает openerp, обновляет систему apt-get upgrade, затем запускает openerp, а затем перезапускает веб-клиент в случае версии & lt; 6.1. Проблема в том, что для этого требуется, чтобы вы использовали скрипт для обновления вашего сервера. Я не использовал псевдоним.