虽然我已经设置了一个 cron 作业,例如计划在内核更新可用时重新启动,但使用易诺德API
curl -s https://api.linode.com/v4/linode/kernels/linode/latest-64bit | grep "Latest.*$(uname -r)" > /dev/null
if [ $? -eq 1 ]
then sudo init 6
fi
更多更改请查看 grep 命令
我的uname -r
输出4.14.12-x86_64-linode92
也比较易诺德API
curl -s https://api.linode.com/v4/linode/kernels/linode/latest-64bit | grep "Latest 64 bit *$(uname -r)" > /dev/null
if [ $? -eq 1 ] ; then
systemctl 重新启动网络
答案1
我在这里看到两个问题:
- 除非您绝对不信任 cURL 的安全性,否则您应该以 root 身份运行它,而不是普通用户。这将允许您摆脱
sudo
使用,这将使事情更容易调试(并且可能使其无需任何其他更改即可工作)。 - 作为一般规则,使用该
init
命令发出重新启动的形式是不好的。reboot
是通用选项,几乎适用于所有 Linux 和其他 UNIX 系统,并且shutdown -r now
通常是 Linux 上的首选方法。你也可以尝试一下,systemctl reboot
因为 Ubuntu 16.04 使用 systemd 作为它的初始化系统。
如果您解决了这两个问题,那么您只需担心 Linode API 和您的grep
表达式协同工作即可。
if
另外,这并不是一个真正的问题,但在大多数情况下,POSIX shell 脚本中的语句的常规形式是:
if [ <condition ] ; then
<do something>
fi
并不是:
if [ <conditon> ]
then <do something>
fi
在大多数现代 shell 中,then
实际上根本不需要它,只是为了让东西看起来更好而存在,但它通常会被保留,因为有一些 shell 确实需要它。这根本不会影响程序的运行方式,它只是大多数使用 shell 脚本的人使用的样式约定(因此,使用第二种形式时您可能会看到奇怪的外观,并且几乎总是会在示例代码中看到第一种形式) 。