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

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

我尝试自己进行一些“编码”,结果如下:

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

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

答案1

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

至于您的 3 条 crontab 行:

@midnight sudo apt-get update && sleep 60 && apt-get upgrade -y

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

00 02 * * 1,3,5 sudo 关机-r

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

#!/bin/bash

[[ -f /var/run/reboot-required.pkgs ]] && reboot

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

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

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

此外,启动依赖于其他服务或条件(例如网络)的服务的更可靠方法是创建一个 systemd.service来完成这项工作。这方面有几个教程(12),我推荐您看一下。

答案2

没有。

  • 您不需要在 cron 中使用 sudo。如果您需要访问需要 root 权限的命令,请使用 root crontab
  • 在 cron 中始终使用绝对路径。
  • 而且您不应该在无人值守的情况下升级 --production-- 服务器;您需要手动进行。如果它是桌面或测试/暂存服务器,那就太好了。我的个人经验来自使用 CLOUD 服务器:重启过程中出现任何问题都是致命的

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

  • 将日志记录添加到“apt”命令
  • 添加一种方法,通过邮件向您发送 apt 命令期间打印的内容。
  • 在执行“apt”之前,您确实应该制作一个完整的系统备份,并将其存储在服务器之外。当更新/升级出错并影响您的系统时(100 次中有 99 次不会影响您的系统,但您不希望这种情况发生 ;)),让您的系统恢复到上次的工作状态比修复问题更重要。

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

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

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

正如 Dan 在评论中所说:crontab大师插入的 crontab 规则状态为“星期一、星期三和星期五 02:00”。

如果没有理由重启,我不会执行它。我的服务器已经运行了 5 年多,每隔一段时间我就会清理一次内存问题之类的东西 :+

答案3

我同意其他答案的所有内容,但请允许我补充一点……

无人看管的情况下运行很危险apt-get。少数应用程序在升级和升级安装期间会询问问题,还有一些应用程序如果放在后台则需要键盘输入,即使不需要键盘输入,它们也会挂起。

尝试像这样在后台运行 apt-get 很可能会导致系统更新中断,必须手动配置和恢复。

无人值守升级过程应该无需干预即可自动安装关键更新。

如果您的机器崩溃了,您需要调查原因。也许整夜运行硬件诊断。检查崩溃前后的日志。也许检查是否有什么东西耗尽了内存并导致机器冻结。等等...

此外,您需要apt autoremove偶尔运行,否则内核更新将会收集,直到您的磁盘填满。

相关内容