Я бы хотел, чтобы мой скрипт резервного копирования выдал уведомление, как только это будет сделано. Я запускаю Ubuntu как автономный сервер и захожу на него, используя PuTTY в Windows. Я уже установил x11-приложения и проверил xclock и xcalc для успешной работы на сервере Windows X (Xming).
Если это невозможно, какую систему уведомлений я могу использовать вместо этого?
Если ваш сервер «действительно» безголовый - как это будет, когда вы установили серверную версию Ubuntu - тогда на нем не будут установлены библиотеки X и, следовательно, он не сможет выступать в роли X-клиента, поэтому нет способа контролировать X-сервер в Windows. (Обратите внимание, что даже xterm
не будет установлено.)
Если ваша сессия PuTTY все еще открыта, то сервер может использовать wall
, чтобы уведомление появлялось на всех терминалах.
В противном случае обычным (и надежным) способом уведомления администратора является отправка электронной почты. Если вы используете cron для запуска задания резервного копирования, вам даже не нужно ничего делать для этого. Я немного потерял связь с Windows, но, думаю, вы можете заставить Windows уведомить вас, когда придет конкретное письмо.
Мне удалось сделать это с рычанием для окон . Вот что вам следует начать очень быстро:
Выше приведено включение сервера уведомлений на окнах (добавьте рычание для окон в загрузочные приложения, чтобы он всегда работал)
Существует много способов отправки уведомлений с вашего сервера Ubuntu, вот простой способ с Python: - установить python / virtualenv - установить пакет gntp: $ pip install gntp
Теперь откройте текстовый редактор и вставьте следующее:
#!/usr/bin/env python
import gntp.notifier
def send(description, applicationName='Sample Application', noteType="Message",
title="Msg", applicationIcon=None, hostname='127.0.0.1',
password=None, port=23053, sticky=False, priority=None,
callback=None, notificationIcon=None, identifier=None):
growl = gntp.notifier.GrowlNotifier(
applicationName=applicationName,
notifications=[noteType],
defaultNotifications=[noteType],
applicationIcon=applicationIcon,
hostname=hostname,
password=password,
port=port,
)
result = growl.register()
return growl.notify(
noteType=noteType,
title=title,
description=description,
icon=notificationIcon,
sticky=sticky,
priority=priority,
callback=callback,
identifier=identifier,
)
if __name__ == '__main__':
send('Testing sample application')
Это предполагает, что ваш ssh-клиент перенаправляет порт 23053 на ваш компьютер с Windows.
Возможно, notify-send
не будет работать с настольного сервера Ubuntu. Однако zenity
может работать почти так же хорошо, как notify-send
, с небольшим количеством сценариев.
zenity --info --text="Notification body"
Например, попробуйте
alias alrt='error_code=$?; __f(){ [[ $1 -eq 0 ]] && zenity --info --text 'Success' || zenity --error --text 'Error'; }; __f $error_code'
true; alrt
false; alrt
Исходное предупреждение
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
Измененное предупреждение с использованием zenity вместо notify-send
alias alert='zenity "$([ $? = 0 ] && echo --info || echo --error)" --text "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
Использование:
команда echo happy; предупреждение проверьте это
команда echo sorrow; ложный; предупреждение проверьте это