Code前端首页关于Code前端联系我们

Linux命令完整列表:crontab计划任务

terry 2年前 (2023-09-28) 阅读数 56 #未命名

在Linux系统中,at命令是一个例行的计划任务,只运行一次,并且循环运行。 Linux系统是通过cron(crond)这个系统服务来控制的。 Linux系统上有很多计划任务,所以默认启动这个系统服务。另外,由于用户还可以自己设置定时任务,因此Linux系统还提供了用户控制定时任务的命令:crontab命令。

1. crond 简介

crond 是 Linux 下的守护进程,用于定期执行某些任务或等待某些事件的处理。类似于Windows下的计划任务。安装操作系统时,默认安装此服务工具,并自动启动crond进程。 crond进程会定期检查每分钟是否有任务需要执行。如果有任务需要执行,请自动执行该任务。
Linux下的任务调度分为两类,系统任务调度和用户任务调度。
系统任务调度:系统周期性执行的工作,如将缓存数据写入硬盘、日志清理等。目录。这是系统任务调度程序的配置文件。
/etc/crontab该文件包含以下行:

[root@localhost yiibai]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- 分钟(minute) (0 - 59)
# |  .------------- 小时 hour (0 - 23)
# |  |  .---------- 一个月中的第几天 day of month (1 - 31)
# |  |  |  .------- 月份 month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- 周几 day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

[root@localhost yiibai]#
Shell

第一个

❓❓❓❓❓❓ c 运行的任务,第一行SHELL 变量指定系统使用哪个shell,这里是bash。第二行的PATH变量指定系统执行命令的路径。第三行中的MAILTO变量指定将Crond任务执行信息通过电子邮件发送给root用户。如果 MAILTO 变量的值为空,则表示不向用户发送执行信息。第四行中的 HOME 变量指定执行命令或脚本时使用的主目录。第六行到第九行所代表的含义将在下一节中详细描述。这里不多说。

用户任务调度:用户需要定期执行的任务,例如用户数据备份、定期邮件提醒等。用户可以使用crontab工具来自定义自己的计划任务。所有自定义 crontab 文件都存储在目录 /var/spool/cron 中。其文件名与用户名一致。

用户权限文件:
文件:

/etc/cron.deny
Shell

描述:

此文件 crontab 中不允许用户 命令

文件:

/etc/cron.allow
Shell

描述:
该文件中列出的用户可以使用 crontab 命令

文件:

/var/spool/cron/
Shell cro ntab 文件存储 该目录位于用户名为
的用户名后面crontab文件的含义:

在❓crontab文件中代表了每个用户,每个字段和每一行代表一个设置,其格式分为六个字段。前五段为时间设置段,第六段为执行命令段。格式如下:

minute   hour   day   month   week   command
Shell

内部:

  • 分钟:表示分钟,可以是 0 到 59 之间的任意整数。它可以是 0 到 23 之间的任何整数。
  • Day:表示日期,可以是1到31之间的任意整数。 1 到 12。
  • Week:表示一周中的第几天,可以是 0 到 7 之间的任意整数,其中 0 或 7 代表星期日。
  • 命令:要执行的命令可以是系统命令,也可以是自己编写的脚本文件。

请请看下图:
linux命令大全:crontab定时任务

在上述每个字段中,您还可以使用以下特殊字符:

  • 星号(*♿❓s 代表任何可能的值): ,例如如果Month字段是星号,表示满足其他字段的约束后每月执行该命令操作。 ? -):您可以在整数之间使用破折号来表示整数范围,例如“2-6”表示“2,3,4,5,6”
  • 正斜杠 (/ ):可以使用正斜杠来指定时间间隔频率,例如“0-23/2”表示每两小时执行一次。同时,正斜杠可以与星号一起使用,如*/10。如果用在分钟字段,则表示每十分钟执行一次。

2。 Crond 服务

通常在 Linux 系统上,Crond 服务是默认安装的。如果未安装,可以执行以下命令进行安装:

yum install crontabs
Shell

业务操作说明:

/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
Shell

View ❀♿❀♿❀ 外壳

手动启动crontab服务:

service crond start
Shell

检查❓♿♿♿♿♿启动命令是否已设置,启动♿启动

ntsysv
外壳 添加开机自动启动:
chkconfig –level 35 crond on
Shell

3. crontab 命令详细解释

1.命令格式

crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
Shell

2.命令功能

通过crontab命令我们可以以固定的时间间隔执行指定的系统命令或shell脚本。时间间隔的单位可以是分钟、小时、天、月、周或以上的任意组合。该命令非常适合定期日志分析或者数据备份等任务。

3。命令参数

  • -u user:用于设置特定用户的crontab服务。例如“ -u ixdba”表示设置ixdba用户的crontab服务。该参数通常有root用户运行。
  • filefile是命令文件的名称,表示该文件被crontab用作任务列表文件并加载到crontab中。如果未在命令行上指定此文件,则 crontab 命令接受在标准输入(键盘)上键入的命令并将其加载到 crontab 中。
  • -e:更改用户的 crontab 文件的内容。如果不指定用户,则表示编辑当前用户的crontab文件。
  • -l:显示特定用户的 crontab 文件的内容。如果不指定用户,则表示显示当前用户的crontab文件的内容。
  • -r:从/var/spool/cron目录中删除用户的crontab文件。如果不指定用户,则默认删除当前用户的crontab文件。
  • -i:删除用户的crontab文件时给出确认提示。

4。常用方法

1)。 创建一个新的Crontab文件
请注意,如果设置Cron进程,则将第一个过程设置为“环境变量编辑器”。 cron 进程使用它来确定使用哪个编辑器来编辑 crontab 文件。 99% UNIX 和 LINUX 用户使用 vi。如果您遇到这种情况,请编辑 $HOME 目录中的文件 .profile 并添加以下行:

EDITOR=vi; export EDITOR
Shell

然后保存并退出。还可以创建一个名为 cron 的文件,其中是用户名,例如 yiibaicron。将以下内容添加到该文件中。

# (put your own initials here)echo the date to the console every
# 15minutes between 6pm and 6am
0,15,30,45 18-08 * * * /bin/echo 'date' > /dev/console
Shell

保存并退出。确保前 字段以空格分隔。
在上例中,系统每隔15分钟向控制台输出当前时间。如果系统崩溃或挂起,最后显示的时间将让您一目了然地知道系统何时停止工作。在某些系统中,tty1 用于表示控制台。上面的例子可以根据当前情况做相应的修改。要提交刚刚创建的 crontab 文件,您可以将此新创建的文件作为参数传递给 cron 命令:

 $ crontab davecron
Shell

现在文件已提交到 cron 进程,运行所有 15 分钟。
同时,新创建的文件的副本被放置在/var/spool/cron目录中,文件名为用户名(即Dave)。
2) 您将看到与上面类似的内容。您可以使用此方法备份$HOME目录下的crontab文件: crontab

文件可以使用上一节介绍的方法快速恢复。

3)vi,然后您可以使用vi编辑Crontab文件。相应的命令是:

$ crontab -e
Shell

可以像 vi 一样使用 编辑任何其他更改 crontab♿ 文件,如退出文件中的那样。如果某些条目发生更改或添加新条目,cron 将在保存文件时对文件执行必要的完整性检查。如果其中一个字段的值超出允许的范围,则会出现提示。

如果我们编辑 crontab 文件,我们可以添加新条目。例如,添加以下内容:

# DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month
30 3 1,7,14,21,26 * * /bin/find -name "core' -exec rm {} \;
Shell

现在保存并退出。最好为 crontab 文件中的每个条目添加注释,以便您了解其功能、运行时间,更重要的是了解它是哪个用户的工作。
现在让我们使用 crontab -l 命令列出其所有信息:

$ crontab -l 
# (crondave installed on Tue May 4 13:07:43 1999)
# DT:ech the date to the console every 30 minites
0,15,30,45 18-06 * * * /bin/echo `date` > /dev/tty1
# DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month
30 3 1,7,14,21,26 * * /bin/find -name "core' -exec rm {} \;
Shell

4)。 删除 crontab 文件
要删除 crontab 文件,您可以使用:

$ crontab -r
Shell

5)。 可以删除 crontab 文件,假设您在 $H O M E 目录中有备份,则可以将其复制到 /var/spool/cron/ 其中是用户名。如果由于权限问题无法完成复制,可以使用:

$ crontab <filename>
Shell

其中 是$HOME 目录下的副本文件名。
建议将此文件的副本保存在您自己的 $HOME 目录中。如果误删了crontab文件(因为r键紧挨着e键的右边)。因此,一些系统文档建议不要直接编辑 crontab 文件,而是编辑该文件的副本,然后重新提交新文件。
一些 crontab 变体有点奇怪,因此使用命令 crontab 时要小心。如果省略所有选项,crontab 可能会打开一个空文件,或显示为一个空文件。这时按删除键即可退出。不要打印,否则crontab文件将会丢失。

5。使用示例

示例 1:每 1 分钟执行命令
命令:

* * * * * python /home/yiibai/run.py
Shell

示例 2:示例 第 3 个和每小时第 15 分钟 命令:

3,15 * * * * command
Shell

实例3:在8点到11点的第3分钟和第15分钟执行
命令:

每两天第3天和第3天8点到11点第15分钟执行命令:

3,15 8-11 * * 1 command
Shell

实例 6:每晚 2​​1:30 重启 smb
命令:

30 21 * * * /etc/init.d/smb restart
Shell

实例 7: .每天23:00
指挥:

0,30 18-23 * * * /etc/init.d/smb restart
Shell

实例 10:每周六 11:00 am 00 am 命令 smb: Shell

示例 11:每小时重新启动 smb 贝壳

实例13: 每月 4 号以及每周一至周三上午 11 点重启 smb
命令:

0 11 4 * mon-wed /etc/init.d/smb restart
Shell实例 14:
1 月 4 日重启 smb Shell

实例 15:每小时运行 /etc/cron.hourly 目录下的脚本
命令:

说明 Shell run-parts这个参数没了。如果删除此参数,则可以写入稍后运行的脚本名称,而不是目录名称。

4. 使用注意事项

1.注意环境变量问题

有时候我们创建一个crontab,但是这个任务无法自动执行,但是手动执行这个任务是没有问题的。这种情况一般是由于crontab文件中没有配置环境变量造成的。
crontab文件中定义多个调度任务时,需要特别注意的一个问题是设置环境变量,因为当我们手动运行任务时,是在当前的shell环境中进行的。当然,程序可以找到环境变量,但是系统自动执行任务调度时,不会加载任何环境变量。因此,您必须在 crontab 文件中指定任务所需的所有环境变量。这样,系统在进行任务调度时就没有问题了。
不要假设 cron 知道特殊情况,它不知道。因此,请确保在 shelll 脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以要注意以下3点:
1)如果脚本中涉及到文件路径就写全局路径;
2) 用于脚本执行Java或其他环境变量 如果通过source命令引入环境变量,如:❙‶地狱3) 如果手动执行脚本可以,但是 crontab 不会过期。这时候你一定强烈怀疑是环境变量惹的祸,可以尝试直接在crontab中引入环境变量来解决问题。例如:

0 * * * * . /etc/profile;/bin/sh /var/www/audit/bin/audit.py
外壳

2。注意清理系统用户的邮件日志

每个任务被调度执行后,系统会将任务输出信息通过邮件发送给当前系统用户。这样,日志信息就会随着时间的推移而积累。它会很大,可能会影响系统的正常运行。因此,重新定位每项任务非常重要。
例如,您可以在 crontab 文件中放入以下形式来忽略日志输出:
shell 0 */2/3 */locl/locl/local/ restart >/dev /null 2>&1shell
"/dev/null 2>&1" 表示首先将标准输出重定向到 /dev/null,然后重定向到标准,由于标准输出已经重定向到/dev/null,所以标准错误也被重定向到/dev/null,从而解决了日志输出问题。

3。系统级任务调度和用户级任务调度

系统级任务调度主要完成系统的一些维护操作,用户级任务调度完成一些用户自定义的任务。用户级任务调度可以在系统级任务调度中设置(不推荐),但反之则不行。 root用户的任务调度操作可以通过“crontab –uroot –e”来设置,也可以直接将调度任务写入/etc/crontab文件中,需要注意的是,如果要定义一个定时重启系统任务,必须在/etc/crontab文件中设置该任务,即使在root用户下创建定时重启系统任务也是无效的。

4。其他说明

新创建的cron作业不会立即执行,至少需要2分钟才会执行。当 cron 重新启动时,它会立即执行。
如果crontab突然失败,可以尝试/etc/init.d/crond restart来解决问题。或者检查日志看看某个作业是否正在运行/报告错误tail -f /var/log/cron
切勿意外运行 crontab -r。它删除用户 Crontab 目录 (/var/spool/cron)。该用户的所有 crontab 都消失了。
crontab中,%有特殊含义,表示换行。如果你想使用它,你必须转义\%。例如,常用的 日期 '+%Y%m%d' 不会在 crontab 中执行,应替换为 %% '%\% m \%d'。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门