关于 Ubuntu 16.04 上的 Cron 作业

关于 Ubuntu 16.04 上的 Cron 作业

虽然我已经设置了一个 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

我在这里看到两个问题:

  1. 除非您绝对不信任 cURL 的安全性,否则您应该以 root 身份运行它,而不是普通用户。这将允许您摆脱sudo使用,这将使事情更容易调试(并且可能使其无需任何其他更改即可工作)。
  2. 作为一般规则,使用该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 脚本的人使用的样式约定(因此,使用第二种形式时您可能会看到奇怪的外观,并且几乎总是会在示例代码中看到第一种形式) 。

相关内容