第一次使用 crontab。这是可行的吗?

Som*_*ude 4 cron

我试图自己做一些“编码”,这就是我想出的:

00 02 * * 1,3,5     sudo shutdown -r
@midnight           sudo apt-get update && sleep 60 && apt-get upgrade -y
@reboot             sleep 60 && sudo netplan apply && sleep 15 && sudo omd start website
Run Code Online (Sandbox Code Playgroud)

重新启动后,网络和网站都已启动并正在运行,这一点至关重要。另外,这1,3,5部分可行吗?这会在 Mo、We 和 Fr 上重新启动机器吗?在更新/升级后安排重新启动是否好/聪明?

Art*_*ild 8

一般评论:不要sudousercrontab中使用,而是考虑将这些命令放在rootcrontab 中,这样它们就可以在没有 sudo 的情况下运行。

至于您的 3 个 crontab 行:

@午夜 sudo apt-get update && sleep 60 && apt-get upgrade -y

这是完全可行的做法apt-get update,并apt-get upgrade -y以这种方式。(不适用于生产服务器,并且在您了解无人值守升级的含义的情况下。)

00 02 * * 1,3,5 须藤关机 -r

我认为没有必要每周重启 3 次。我自己使用这个非常简单的重启脚本:(称为auto-reboot.sh

#!/bin/bash

[[ -f /var/run/reboot-required.pkgs ]] && reboot
Run Code Online (Sandbox Code Playgroud)

因此,在升级和清理脚本之后,我每周都使用 cron 运行此脚本。它仅在机器需要重新启动(如果/var/run/reboot-required.pkgs存在)时重新启动。(同样,这不适用于生产服务器。)

@reboot sleep 60 && sudo netplan apply && sleep 15 && sudo omd start website

我不明白为什么你需要netplan apply在重启时运行。

此外,启动依赖于另一个服务或条件(例如网络)的服务的更可靠方法是创建一个 systemd.service来完成这项工作。有几个针对此的教程 ( 1 , 2 ),我建议您查看一下。

  • @SomeDude 听起来您在某处遇到了严重问题。我的 _laptop_ 能够 24/7 全天候运行,我无法想象您的硬件不能。检查您的 RAM 和交换使用情况或提出新问题,我们可以帮助您进行调查。 (4认同)
  • 以防万一有人想知道:我们写了这两个相互独立的东西,而且实际上主要写了相同的东西。让我笑了 :-) 我不能成为唯一的投票者 :( (2认同)
  • 是的,对我来说也是一样 - 通常是相同的信息,但涵盖了一些不同的细微差别。;-) (2认同)

Rin*_*ind 8

不。

  • 您不在 cron 中使用 sudo。如果您需要访问需要 root 的命令,请使用 root crontab
  • 在 cron 中始终使用绝对路径。
  • 并且您不应该在无人看管的情况下升级 --production-- 服务器;你手动完成。如果它是台式机或测试/登台服务器,那就很酷了。我的个人经验来自使用 CLOUD 服务器:重启期间出现的任何问题都是致命的

但如果你真的想这样做,我会添加以下 3 ...

  • 将日志记录添加到“apt”命令
  • 添加一种方法将在 apt 命令期间打印的内容邮寄给您。
  • 在“apt”之前,您确实还应该制作存储在服务器外部的完整系统备份。当更新/升级出错并影响您的系统时(100 个中有 99 个不会,但您不希望 1 个发生;))让您的系统恢复到最后的工作状态比解决问题更重要。

sleep 60 && sudo netplan apply && sleep 15 && sudo omd start website

这应该是不需要的。我会用“服务”来安排这个。这样你就可以创建一个等待彼此的命令链。“sleep 60”和“sleep 15”...如果需要 61 和 16 怎么办?服务将为您解决该问题。

另外,1,3,5 部分是否可行?这会在 Mo、We 和 Fr 上重新启动机器吗?

正如丹在评论中所说:crontab.guru插入了您的 crontab 规则,声明“在星期一、星期三和星期五的 02:00”。

如果没有重新启动的理由,我不会执行它。我的服务器运行了 5 年以上,每次我清理内存问题时都会出现一次:+

  • 实际上,使用`type`,而不是`which`,因为`type` 也会解析别名、函数等。请参阅[为什么不使用“which”?那该用什么?](https://unix.stackexchange.com/q/85249) (2认同)