我正在尝试实现移动推送通知(利用 Docker ntfy 服务)以实现自动系统更新和 Timeshift 快照创建等场景。
在我的案例中,这些命令都没有定期安排;因此,Crontab 不是一个可行的选择(只是一个简短的免责声明)。我的目标是接收有关 Timeshift 准备快照等事件的通知。任务成功完成时,应该发送推送通知。如果发生故障,我也希望收到通知。
我的本地 Docker ntfy 服务运行顺畅。但是,我有兴趣在 Timeshift 操作之前和之后合并其他命令。我考虑过使用别名,但它们必须具有相同的名称,我认为这是不可行的。
修改命令可能会导致问题,如图所示在下面的帖子中。
对于如何解决这种情况有什么建议吗?
预期结果:
- 系统启动 Timeshift 流程。
- 推送了包含相关评论的通知。
- 快照已成功创建。
- 完成后将发送另一个推送命令。
重要的是 - 我想保留通过特定命令提供的所有功能。因此,对于带有各种选项和标志的 Timeshift,它们应该保留在原处。
答案1
将命令包装timeshift
在bash
脚本中,然后调用该脚本。例如:
#!/bin/bash
# set up environment (PATH, ...)
#
notify-send timeshift "Timeshift starting"
timeshift ...
err=$?
if [[ 0 -ne $err ]] ; then
printf -v msg "failed with error code %d" $err
else
msg="succeeded"
fi
notify-send timeshift "Timeshift $msg"
更改您调用的所有配置、.desktop
文件、脚本等,以timeshift
改为调用脚本。
或者
你可以玩游戏$PATH
- 把你的timeshift
脚本(为了使其工作,你必须调用 itv )放在比实际timeshift
更早的目录中;使用绝对路径()在你的脚本中调用实际;进行更改,以便它们在自动启动时生效。⁸$PATH
timeshift
timeshift
/usr/bin/timeshift
$PATH
~/.profile
答案2
@waltinator 我修改了你的代码,结果如下:
#!/bin/bash
curl -d "TIMESHIFT Creating snapshot.. " local_ip:port/Ubuntu
if [ -n "$SUDO_PASSWORD" ]; then
result=$(echo "$SUDO_PASSWORD" | sudo -S /usr/bin/timeshift $@)
err=$?
if [[ 0 -ne $err ]] ; then
curl -d "TIMESHIFT - ERR: $result" local_ip:port/Ubuntu
else
curl -d "TIMESHIFT - snapshot created!" local_ip:port/Ubuntu
fi
else
curl -d "TIMESHIFT SUDO_PASSWORD not exists!!! " local_ip:port/Ubuntu
fi
我的例子里的文件名是timeshift_ntfy.sh。 当我直接从 bash 运行它时,它工作得很好!到目前为止,我非常高兴。
但我在这里被困住了。
在 ~/.profile 中更改 $PATH,以便自动启动时生效
我尝试在 ~/.profile 或 ~/.bashrc 文件中添加以下行:
export PATH="/home/zawier/Skrypty/timeshift_ntfy:/home/zawier/Skrypty/timeshift:$PATH"
我一直以为这是正确的方法,但当我看到输出来自原始时间移位时,我错了。当然我已经这样做了:
source ~/.profile
source ~/.bashrc
不幸的是没有运气:(我在这里做错了什么?