曾经想在长时间运行的进程/命令完成时收到通知,不仅在您的桌面上,而且在您的手机上? Noti 可以做到这一点。
Noti 是一个适用于 macOS、Linux 和 Microsoft Windows 的命令行工具,用于监控进程/命令,并在它运行完成后在您的桌面或手机上触发通知。
支持的通知:
- 桌面通知(横幅)
- 演讲
- BearyChat
- 密钥库
- 最重要的
- 推子弹
- 推倒
- 推安全器
- 简单推送
- 松弛
- 电报
- 朱利普
- 特威利奥
所有这些受支持的通知都适用于 macOS、Linux 和 Windows。
值得注意的是,如果您只想在 Linux 上完成一个长时间运行的命令时收到桌面通知,您可以简单地运行 command; notify-send Done
(例如 sleep 3; notify-send Done
)。
默认情况下,Noti 仅显示文本“完成!” 当一个长时间运行的任务完成时,但这可以扩展。 您可以指定通知标题(默认为实用程序名称),设置通知消息(默认为“完成!”;从标准输入读取 -
),并在通知消息中显示执行时间。
您可以在命令的开头使用 Noti,例如:
noti sleep 3
在命令之后,例如:
sleep 3; noti
您甚至可以在命令已经启动后使用 Noti,方法是获取进程 PID,然后使用以下命令:
noti --pwatch PID
或按 Ctrl + z
在进程启动后暂时挂起它,然后使用以下命令恢复它:
fg; noti
有关 Noti 的更多信息,包括如何使用各种服务设置 Noti 通知、Noti 环境变量等,请参阅此页面。 在测试这个时,我注意到这个页面有点过时了。 例如,Slack 不再允许创建遗留测试人员令牌。 因此,您可能还想查看此处的 Noti 手册页和此处的 noti.yaml man。
继续阅读以了解如何安装和配置 Noti,包括设置 Noti 以在长时间运行的命令完成时通过 Telegram 和 Slack 在您的移动设备上通知的完整说明。
如何在 Linux 上每 X 秒重复一次命令
安装和配置 Noti
使用上述按钮链接的 Noti 安装说明包含多种安装此工具的方法。 如果您想直接获取二进制文件,只需转到该工具的 GitHub 发布页面即可。
在 Linux 上安装 Noti 的最简单方法是从发布页面下载二进制文件,解压缩存档,然后安装 noti
二进制到 /usr/local/bin
使用(假设您已经在您的主文件夹中提取了 Noti 二进制存档,并且您在您的主目录中打开了终端):
sudo install noti*linux-amd64/noti /usr/local/bin
默认情况下,Noti 使用桌面通知(横幅)。 下面我将向您展示如何配置 Noti 以在长时间运行的进程完成时发送通知,在您的移动设备上通过 Slack 和 Telegram,因为这是我使用的。 如果您想将它与其他服务一起使用,您需要使用说明自行配置(尽管在我看来有些不完整,并且在某些情况下已经过时,例如您不能再创建 Slack 令牌,您必须使用一个 Slack 应用程序)从这里。
Bit 是一个带有交互式提示的现代 Git CLI
配置 Noti 以在长时间运行的命令完成运行时通过在 Telegram 上发送消息来通知您
要让 Noti 在长时间运行的命令运行完毕后向您发送 Telegram 消息,您需要一个 Telegram chatId
和 token
. 这适用于 Telegram 聊天或频道。 在我下面的说明中,我们将使用 Telegram 频道。
1. 创建一个 Telegram 频道。
您需要做的第一件事是创建一个 Telegram 频道。 它可以有您想要的任何名称和描述。
2. 创建一个 Telegram bot 并获取 HTTP API 访问令牌。
接下来,您需要使用 BotFather (@botfather) 创建机器人并获取 HTTP API 访问令牌。
为此,请与@botfather 开始聊天,然后键入 /start
在聊天中查看可用命令等。现在输入 /newbot
创建一个新机器人,然后按照说明操作(您需要为新机器人设置名称和用户名)。 完成后,@botfather 将显示访问 HTTP API 的令牌。 复制此令牌,因为我们稍后会需要它。
3. 将步骤 2 中创建的 Telegram bot 添加到您的频道并获取 chatId
.
现在我们有了一个令牌,但我们还需要获取 chatId。
将您在第 2 步中创建的机器人添加到您的新 Telegram 频道(转到该频道,然后从选项中选择 Add users
并搜索您创建的机器人)。
添加机器人后,在您的 Telegram 频道中输入一条消息。 这对于获得 chatId
.
现在你可以得到 chatId
通过访问以下链接,您必须对其进行编辑:
https://api.telegram.org/botXXX:YYYYY/getUpdates
代替 XXX:YYYYY
使用您在第 2 步中获得的机器人的 HTTP API 令牌。
此链接将显示一堆文本,您将在其中找到:
chat":{"id":-100999999999}
这里的 id 是你的 chatId
您需要与 Noti 一起使用。 那 -
数字开头的符号是数字的一部分 chatId
,因此请确保您也使用它,而不仅仅是数字。
4. 创建 Noti 配置文件(如果您还没有创建)并添加 Telegram。
现在我们知道电报 chatId
和 HTTP API token
,创建Noti配置文件,名为 noti.yaml
在 ~/.config/noti/
使用文本编辑器打开此文件并粘贴以下内容:
telegram:
token: THE_HTTP_API_TOKEN_GOT_UNDER_STEP_2
chatId: 'THE_CHAT_ID_GOT_UNDER_STEP_3'
示例(编辑为不包含我的真实 token
和 chatId
):
telegram:
token: 1598888700:AEEijJJcsABpYR1LdJ4_Llkr1Vq48vxAUSg
chatId: '-10099999999999'
使用以下命令在长时间运行的命令完成运行时测试 Noti 发送 Telegram 消息:
sleep 3; noti --telegram
不用担心,每次使用Noti时都不需要添加–telegram命令行参数。 你可以导出 NOTI_DEFAULT
使用要触发的通知类型列表,例如使用桌面横幅通知和电报通知,您需要导出 NOTI_DEFAULT="banner telegram"
.
添加 export NOTI_DEFAULT="banner telegram"
给你的 ~/.profile
文件以使更改永久化。 显然,编辑 NOTI_DEFAULT
通知类型为您要使用的内容。 更改后退出并重新登录 ~/.profile
文件以使用新设置。
您可能还感兴趣:如何使用 find 查找最近 N 天或几分钟内修改过的文件
将 Noti 配置为通过在 Slack 上发送消息来在长时间运行的命令完成运行时通知您
Noti 文档页面提到为测试和开发创建 OAuth 令牌,但 Slack 不再支持此操作。 取而代之的是,我们需要创建一个 Slack 应用程序。
1. 使用网络浏览器登录 Slack。
2. 创建一个 Slack 应用程序。
前往 https://api.slack.com/apps/new 并使用您想要的任何名称创建一个新的 Slack 应用程序。
3. 激活传入 Webhook。
创建 Slack 应用程序后,您将被重定向到新应用程序的设置页面。 这里(有 Basic Information
在左侧边栏上选择),展开 Add features and functionality
部分,然后单击 Incoming Webhooks
. 在这里,打开旁边的开关 Activate Incoming Webhooks
.
4. 创建传入 Webhook。
在底部 Incoming Webhooks
页面,点击 Add New Webhook to Workspace
,然后选择一个频道或您自己(后者在 Direct Messages
)。 您将在此处收到通知。 我在这里选择了我的用户名。
[[Edit]] Slack API 文档中也解释了创建 Slack 应用程序和传入 Webhook 的步骤。
创建传入 Webhook 后,您将被重定向到 Incoming Webhooks
页。 在此页面的底部,您应该看到 Webhook URL
. 复制这个网址。
5. 创建 Noti 配置文件(如果您还没有创建)并将 Slack 添加到其中。
现在我们已经获得了 Slack Webhook URL,创建 Noti 配置文件,名为 noti.yaml
在 ~/.config/noti/
使用文本编辑器打开此文件并粘贴以下内容:
slack:
appurl: 'https://hooks.slack.com/services/xxx/yyy/zzz'
在这里,替换 appurl
使用您在第 4 步中获得的 Slack Webhook URL 的值,然后保存文件。
使用以下命令在长时间运行的命令完成运行时发送 Slack 通知的测试通知:
sleep 3; noti --slack
在输入时始终使用 Slack 发送通知 noti
(所以你不必输入 noti --slack
每次你想在 Slack 上收到通知时),你可以导出 NOTI_DEFAULT
使用要触发的通知类型列表,例如使用桌面横幅通知和 Slack 通知,您需要导出 NOTI_DEFAULT="banner slack"
.
添加 export NOTI_DEFAULT="banner slack"
给你的 ~/.profile
文件以使更改永久化。 显然,编辑 NOTI_DEFAULT
通知类型为您要使用的内容。 更改后退出并重新登录 ~/.profile
文件以使用新设置。
Bash 历史记录:如何在执行每个命令时显示时间戳(日期/时间)