我希望我的备份脚本在完成后发出通知。我将 Ubuntu 作为无头服务器运行,并使用 Windows 上的 PuTTY 登录。我已经安装了 x11-apps,并验证了 xclock 和 xcalc 可以在 Windows X 服务器 (Xming) 上成功运行。
如果这不可能的话,我可以使用哪种通知系统来代替?
答案1
如果您的服务器是“真正”无头的 - 就像您安装 Ubuntu 的服务器版本时一样 - 那么它将不会安装 X 库,因此无法充当 X 客户端,所以它无法控制 Windows 上的 X 服务器。 (请注意,甚至不会xterm
安装。)
如果您的 PuTTY 会话仍然打开,那么服务器可以用来wall
使通知出现在所有终端上。
否则,通知管理员的惯常(且有弹性)方式是发送电子邮件。如果您使用计划任务要触发备份作业,您甚至不需要为此做任何事情。我对 Windows 有点陌生,但我想您可以让 Windows 在收到特定电子邮件时通知您。
答案2
我已经成功地做到了这一点窗户发出咆哮声。以下是一些可以帮助您快速入门的内容:
- 为 Windows 安装 growl
- 在 growl 配置的“安全”选项卡上,禁用“需要 LAN 应用程序密码”(YMMV,我使用 Windows 防火墙管理安全性)并启用“允许网络通知”
以上操作将在 Windows 上启用通知服务器(将 Windows 的 growl 添加到启动应用程序中,以便始终运行它)
有很多方法可以从您的 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 机器。
答案3
可能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 command; alert check this out
echo sorrow command; false; alert check this out