【Linux-Ubuntu】定时任务 cron 详解

痛苦的年假

去年年假,我身处家中,但工作却未停歇。由于公司业务需要,我需要经常连接到测试服务器,确保一切运转良好。然而,远程控制桌面软件的卡顿和电脑稳定性成了我不得不面对的问题。

在这种情况下,我决定尝试一种新的解决方案:内网穿透。这样,公司的小伙伴们也能通过SSH连接到测试服务器,而不用担心我的电脑问题或远程桌面卡顿的困扰。

然而,新问题接踵而至。测试服务器并非高可用(其实就是几台旧电脑),性能还不如我在家中使用的电脑。谁也不能保证它不会出现卡顿或关机的情况。这就给了我一个新的挑战:如何保证测试服务器的高可用性,尤其是在我不在公司的时候?

为了确保一个宁静而不被打扰的年假,我决定给测试机配置一个定时任务。每天凌晨,服务器会自动关机,然后重启,重新开启内网穿透和运行所有项目。这样一来,我就可以强行保证测试服务器的高可用性,而不必担心在年假期间出现任何问题。

如何配置内网穿透?

请参考 【Linux-Ubuntu】内网穿透工具 FRP (Fast Reverse Proxy)

如何让 Linux 执行定时任务呢?

这就说到重点了,接下来我会一步一步的带着大家配置和使用Linux-Ubuntu中一个非常强大的定时任务管理器 corn

首先我们的环境是

  • Linux Ubuntu 20.04.2 LTS x86_64

我们要使用的计划任务cron

1. 什么是 cron

cron 是一种后台服务,其名称源自"Chronos"(希腊语中的时间之神)。它允许用户在特定的时间、日期或时间间隔内运行特定的命令,从而实现计划任务的自动化执行。cron 为系统管理员和开发人员提供了方便的方式,让任务按照既定的计划自动完成。

2. cron的工作原理

cron 依赖于 crontab 文件,该文件包含了用户定义的计划任务列表。这些任务将按照用户指定的时间表执行。crontab 文件可以包含多个任务,每个任务都在文件的一行中描述,并遵循特定的时间格式。

3. cron的时间格式

crontab 文件的时间字段由五个星号组成:

shell 复制代码
* * * * *  task
  • 第一个 * 代表分钟(0-59)
  • 第二个 * 代表小时(0-23)
  • 第三个 * 代表日期(1-31)
  • 第四个 * 代表月份(1-12)
  • 第五个 * 代表星期几(0-6,0 表示星期天)

这些星号可以使用特定的数字或通配符来表示时间。例如,* 表示 "每一个",*/2 表示 "每隔 2"。

说了这么多 cron应该如何安装呢?

在大多数基于 Debian 或 Ubuntu 的 Linux 系统上,cron 已经默认安装。

你可以通过以下方法来检查 cron 是否安装在系统上:

bash 复制代码
sudo service cron status

或者使用 systemctl

bash 复制代码
sudo systemctl status cron

如果 cron 未安装,你可以使用以下命令安装:

bash 复制代码
sudo apt-get update 
sudo apt-get install cron

cron重启

bash 复制代码
sudo service cron restart

或者

bash 复制代码
sudo systemctl restart cron

cron应该如何使用呢?

1、编辑用户的 crontab

使用下面的命令来编辑当前用户的 crontab:

bash 复制代码
crontab -e

这会打开一个文本编辑器,你可以在其中添加定时任务。

2、添加定时任务

crontab 文件的每一行都表示一个定时任务,其格式如下:

bash 复制代码
* * * * *  task
  • 第一个 * 代表分钟(0-59)
  • 第二个 * 代表小时(0-23)
  • 第三个 * 代表日期(1-31)
  • 第四个 * 代表月份(1-12)
  • 第五个 * 代表星期几(0-6,0 为星期天)
  • * 可以用来表示 "每一个",例如:
  • * 表示 "每一个",在分钟字段上表示每分钟。
  • */2 表示 "每隔 2",在分钟字段上表示每两分钟。
  • task 实际命令或脚本

例如,在每天凌晨 2 点执行一个脚本:

bash 复制代码
0 2 * * * /path/to/your/script.sh

3、定时任务的输出 & 捕获异常

如果你想要捕获任务的输出,可以将输出重定向到文件。例如:

bash 复制代码
0 2 * * * /path/to/your/script.sh > /path/to/logfile.log 2>&1

这将把脚本的标准输出和标准错误都追加到指定的日志文件中。

4、查看现有的定时任务

使用以下命令可以查看当前用户的所有定时任务:

bash 复制代码
crontab -l

5、移除所有的定时任务:

使用以下命令可以删除当前用户的所有定时任务:

bash 复制代码
crontab -r

觉得作者写的不错的,值得你们借鉴的话,就请点一个免费的赞吧!这个对我来说真的很重要。૮(˶ᵔ ᵕ ᵔ˶)ა

相关推荐
小O_好好学11 分钟前
Linux帮助命令
linux·运维·服务器
卡戎-caryon33 分钟前
【操作系统】01.冯·诺伊曼体系结构
服务器·笔记·操作系统·冯·诺伊曼体系结构
OH五星上将33 分钟前
OpenHarmony(鸿蒙南向开发)——标准系统方案之瑞芯微RK3568移植案例(下)
linux·驱动开发·嵌入式硬件·harmonyos·openharmony·鸿蒙开发·系统移植
周湘zx43 分钟前
k8s中的微服务
linux·运维·服务器·微服务·云原生·kubernetes
Jack黄从零学c++1 小时前
自制网络连接工具(支持tcpudp,客户端服务端)
linux·c语言·开发语言·网络协议·tcp/ip·udp·信息与通信
‍理我2 小时前
Linux系统编程(基础指令)上
linux·服务器
-杀意感知-2 小时前
Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
linux
周湘zx2 小时前
k8s中的存储
linux·运维·云原生·容器·kubernetes
_平凡之路_3 小时前
解决ubuntu22.04 gnome-terminal 无法启动的问题
linux·运维·python
YRr YRr3 小时前
在Windows上安装WSL2和Ubuntu 20.04以搭建C++开发环境的详细指南
c++·windows·ubuntu·wsl2