想了解如何在Linux中使用at和crontab命令的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于linux中at的用法的相关问题,此外,我们还将为您介绍关于crontabpermissi
想了解如何在 Linux 中使用 at 和 crontab 命令的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于linux中at的用法的相关问题,此外,我们还将为您介绍关于crontab permission denied 解决办法,crontab 进程存在就不执行的方法、django-crontab 运行 python manage.py crontab add 提示 系统找不到指定的路径。、linux centos6 安装 crontab、linux cron crontab anacron 计划任务 定时任务的新知识。
本文目录一览:- 如何在 Linux 中使用 at 和 crontab 命令(linux中at的用法)
- crontab permission denied 解决办法,crontab 进程存在就不执行的方法
- django-crontab 运行 python manage.py crontab add 提示 系统找不到指定的路径。
- linux centos6 安装 crontab
- linux cron crontab anacron 计划任务 定时任务
如何在 Linux 中使用 at 和 crontab 命令(linux中at的用法)
经验丰富的系统运维工程师可以使得 Linux 在无需人为介入的情况下,在指定的时间段自动启用或停止某些服务或命令,从而实现运维的自动化。尽管我们现在已经有了功能彪悍的脚本程序来执行一些批处理工作,但是,如果仍然需要在每天凌晨两点敲击键盘回车键来执行这个脚本程序,这简直太痛苦了(当然,也可以训练您的小猫在半夜按下回车键)。接下来,将向大家讲解如何设置服务器的计划任务服务,把周期性、规律性的工作交给系统自动完成。 计划任务分为一次性计划任务与长期性计划任务,大家可以按照如下方式理解。
一次性计划任务:今晚 11 点 30 分开启网站服务。
长期性计划任务:每周一的凌晨 3 点 25 分把 /home/wwwroot 目录打包备份为 backup.tar.gz。
顾名思义,一次性计划任务只执行一次,一般用于满足临时的工作需求。我们可以用 at 命令实现这种功能,只需要写成 “at 时间” 的形式就可以。如果想要查看已设置好但还未执行的一次性计划任务,可以使用 “at -l” 命令;要想将其删除,可以用 “atrm 任务序号”。在使用 at 命令来设置一次性计划任务时,默认采用的是交互式方法。例如,使用下述命令将系统设置为在今晚 23:30 分自动重启网站服务。
[root@linuxprobe ~]# at 23:30at > systemctl restart httpdat > 此处请同时按下Ctrl+d来结束编写计划任务job 3 at Mon Apr 27 23:30:00 2015[root@linuxprobe ~]# at -l3 Mon Apr 27 23:30:00 2016 a root
<以上代码可复制粘贴,可往左滑>
如果想挑战一下难度更大但简捷性更高的方式,可以把管道符(任意门)放到两条命令之间,让 at 命令接收前面 echo 命令的输出信息,以达到通过非交互式的方式创建计划一次性任务的目的。
[root@linuxprobe ~]# echo "systemctl restart httpd" | at 23:30job 4 at Mon Apr 27 23:30:00 2015[root@linuxprobe ~]# at -l3 Mon Apr 27 23:30:00 2016 a root4 Mon Apr 27 23:30:00 2016 a root
<以上代码可复制粘贴,可往左滑>
如果我们不小心设置了两个一次性计划任务,可以使用下面的命令轻松删除其中一个:
[root@linuxprobe ~]# atrm 3[root@linuxprobe ~]# at -l4 Mon Apr 27 23:30:00 2016 a root
<以上代码可复制粘贴,可往左滑>
如果我们希望 Linux 系统能够周期性地、有规律地执行某些具体的任务,那么 Linux 系统中默认启用的 crond 服务简直再适合不过了。创建、编辑计划任务的命令为 “crontab -e”,查看当前计划任务的命令为 “crontab -l”,删除某条计划任务的命令为 “crontab -r”。另外,如果您是以管理员的身份登录的系统,还可以在 crontab 命令中加上 - u 参数来编辑他人的计划任务。
在正式部署计划任务前,请先念一下口诀 “分、时、日、月、星期 命令”。这是使用 crond 服务设置任务的参数格式。需要注意的是,如果有些字段没有设置,则需要使用星号(*****)占位。
使用 crond 设置任务的参数格式
使用 crond 设置任务的参数字段说明
字段 | 说明 |
---|---|
分钟 | 取值为 0~59 的整数 |
小时 | 取值为 0~23 的任意整数 |
日期 | 取值为 1~31 的任意整数 |
月份 | 取值为 1~12 的任意整数 |
星期 | 取值为 0~7 的任意整数,其中 0 与 7 均为星期日 |
命令 | 要执行的命令或程序脚本 |
假设在每周一、三、五的凌晨 3 点 25 分,都需要使用 tar 命令把某个网站的数据目录进行打包处理,使其作为一个备份文件。我们可以使用 crontab -e 命令来创建计划任务。为自己创建计划任务无需使用 - u 参数,具体的实现效果的参数如 crontab -l 命令结果所示:
[root@linuxprobe ~]# crontab -eno crontab for root - using an empty onecrontab: installing new crontab[root@linuxprobe ~]# crontab -l25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
<以上代码可复制粘贴,可往左滑>
需要说明的是,除了用逗号(,)来分别表示多个时间段,例如 “8,9,12” 表示 8 月、9 月和 12 月。还可以用减号(-)来表示一段连续的时间周期(例如字段 “日” 的取值为 “12-15”,则表示每月的 12~15 日)。以及用除号(/)表示执行任务的间隔时间(例如 “*/2” 表示每隔 2 分钟执行一次任务)。
如果在 crond 服务中需要同时包含多条计划任务的命令语句,应每行仅写一条。例如我们再添加一条计划任务,它的功能是每周一至周五的凌晨 1 点钟自动清空 /tmp 目录内的所有文件。尤其需要注意的是,在 crond 服务的计划任务参数中,所有命令一定要用绝对路径的方式来写,如果不知道绝对路径,请用 whereis 命令进行查询,rm 命令路径为下面输出信息中加粗部分。
[root@linuxprobe ~]# whereis rmrm: /usr/bin/rm /usr/share/man/man1/rm.1.gz /usr/share/man/man1p/rm.1p.gz[root@linuxprobe ~]# crontab -ecrontab: installing new crontab[root@linuxprobe ~]# crontab -l25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot0 1 * * 1-5 /usr/bin/rm -rf /tmp/*
<以上代码可复制粘贴,可往左滑>
总结
最后,再来啰嗦几句在工作中使用计划服务的注意事项。
在 crond 服务的配置参数中,可以像 Shell 脚本那样以 #号开头写上注释信息,这样在日后回顾这段命令代码时可以快速了解其功能、需求以及编写人员等重要信息。
计划任务中的 “分” 字段必须有数值,绝对不能为空或是 * 号,而 “日” 和 “星期” 字段不能同时使用,否则就会发生冲突。
以上就是良许教程网为各位朋友分享的如何在 Linux 中使用 at 和 crontab 命令。 以上就是良许教程网为各位朋友分享的 Linux 相关知识。
crontab permission denied 解决办法,crontab 进程存在就不执行的方法
crontab permission denied
出现场景
出现情况,sh文件在本地Win下面开发,每次修改,提交后在Linux上pull下来,却发现x权限消失。
导致crontab 里面定时任务出现了报错permission denied
解决办法
对该脚本文件强制增加权限
git add --chmod=+x sphinx.sh git commit -m "add executable permission"
需求:如果进程indexer
存在,定时任务就不执行 indexer --rotate
的方法:
pidof indexer && exit 0
表示如果这个进程存在,那么直接退出
测试方法:
sh sh path/to/file.sh
django-crontab 运行 python manage.py crontab add 提示 系统找不到指定的路径。
django-crontab 运行 python manage.py crontab add 提示 系统找不到指定的路径。
(venv) C:\xumin_dingli_web>python manage.py crontab add
系统找不到指定的路径。
adding cronjob: (2d2cbc2aa67eaebf92d9ea0ee6a2c9c2) -> (''*/1 * * * *'', ''djangoCrontab.testDemo.test_some_one'')
系统找不到指定的路径。
linux centos6 安装 crontab
yum install vixie-cron crontabs -y //安装
chkconfig crond on //开机自启动
service crond start //启动
然后就是执行 crontab -e 来添加你的任务
格式: | minute | hour | dayofmonth | month | dayofweek | command |
解释: | 分钟 | 小时 | 日期 | 月份 | 周 | 命令 |
范围: | 0-59 | 0~23 | 1~31 | 1~12 | 0~7,0和7都代表周日 |
如:
每天凌晨1:00执行备份程序:00 01 * * * 这里你要执行的命令
crontab -l
linux cron crontab anacron 计划任务 定时任务
在linux下,如果想要在未来的某个时刻执行某个任务,并且在未来的每一个这样的时刻里都要执行这个任务。举个简单的例子,比如说想要在将来,每天的十二点都重启路由器,大多数发行版都自带一个守护进程(daemon)cron来完成这项工作。这篇文章主要介绍了在linux上定期执行命令、脚本(cron,crontab,anacron)的相关知识
1. cron,crontab以及anacron的关系
cron是大多数linux发行版都自带的守护进程(daemon),用来重复运行某些被设定好了确定的运行时间的任务,这些任务可以是每个月运行、每周运行、每天运行,甚至是每一分钟运行。用cron执行的任务适合于24小时运行的机器,cron执行的任务会在设定好的时刻执行,当机器处于关机状态下并错过了任务执行的时间,cron任务就无法预期执行了。
crontab(cron table的简称)既可以指cron用来定期执行特定任务所需要的列表文件,又可以指用来创建、删除、查看当前用户(或者指定用户)的crontab文件的命令。
anacron不是守护进程,可以看做是cron守护进程的某种补充程序,anacron是独立的linux程序,被cron守护进程或者其他开机脚本启动运行,可以每天、每周、每个月周期性地执行一项任务(最小单位为天)。适合于可能经常会关机的机器,当机器重新开机anacron程序启动之后,anacron会检查anacron任务是否在合适的周期执行了,如果未执行则在anacron设定好的延迟时间之后只执行一次任务,而不管任务错过了几次周期。举个例子,比如你设定了一个每周备份文件的任务,但是你的电脑因为你外出度假而处于关机状态四周,当你回到家中开机后,anacron会在延迟一定时间之后只备份一次文件。由于发行版的不同,cron守护进程如何运行anacron会有所不同。
2.crontab命令,crontab文件语法
系统默认crontab文件为/etc/crontab,以及/etc/cron.d/目录下的文件,有些程序会把自己的crontab文件放在/etc/cron.d/目录下。要修改/etc/crontab以及/etc/cron.d/目录下的文件需要root权限。cron守护进程会检查/etc/crontab以及/etc/cron.d/目录下的文件,根据这些文件中的cron任务所设置的执行时间决定是否执行任务,如果当前时间与cron任务所设置的执行时间相同,则执行任务。
每个用户自己的crontab文件都会被放在 /var/spool/cron目录下,默认为空,可以使用crontab命令创建。cron守护进程会检查/var/spool/cron目录下的文件,根据这些文件中的cron任务所设置的执行时间决定是否执行任务,如果当前时间与cron任务所设置的执行时间相同,则执行任务。
当cron的配置文件发生改变时,不需要重置cron守护进程。cron守护进程会检查配置文件的变化。
创建自己的crontab之前,首先要设置环境变量EDITOR,cron进程根据它来确定使用哪个编辑器编辑crontab文件。在home目录下的.bashrc或者.profile里加入一行
#你也可以使用自己喜爱的其他终端编辑器
EDITOR=vim; export EDITOR
2.1.crontab命令参数及使用示例
[root@calc ~]# crontab -help
crontab:无效选项 -- h
crontab: usage error: unrecognized option
Usage:
crontab [options] file
crontab [options]
crontab -n [hostname]
Options:
-u <user> define user
-e edit user's crontab
-l list user's crontab
-r delete user's crontab
-i prompt before deleting
-n <host> set host in cluster to run users' crontabs
-c get host in cluster to run users' crontabs
-s selinux context
-x <mask> enable debugging
Default operation is replace,per 1003.2
创建并编辑当前用户的crontab
crontab -e
列出当前用户的crontab
crontab -l
删除用户l user01 的crontab
crontab -u user01 -i -r
2.2.crontab文件语法详解及示例
当用 crontab -e 编辑当前用户的crontab文件时,首先写入以下内容。
# crontab -e
SHELL=/bin/bash
MAILTO=root@example.com
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
# 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
该文件的前三行代码设置了默认环境。cron守护进程并不提供任何环境。SHELL变量设置当cron任务(命令以及脚本)运行时的shell,MAILTO变量设置cron任务执行结果发送的邮箱,PATH设置去哪些目录下寻找cron任务的命令。注释部分则解释一条cron任务的构成,一条cron任务就是一行,要设置多少条cron任务则写多少行。一条cron任务由七个部分组成,从左到右依次为:
- 分钟(0-59)
- 小时(0-23)
- 天(1-31)
- 月 (1-12):或者可以使用月份的英文单词的前三个字母,比如jan,apr...
- 星期(0-6):星期天用0或者7都可以,或者可以使用星期的英文单词的前三个字母,比如sun,sat
- 用户名称(可以省略)
- 要执行的命令或者脚本目录
前五个部分的编写注意特殊符号的含义:
- 如果你想匹配取值范围内的所有值,使用“*”
- 想匹配某些特殊的值,使用“,”,比如2,4,7就匹配的是2,4以及7。
- 两个值被“-”连接表示范围,此时匹配的是范围内所有值,包含“-”两边的值,比如4-7匹配的就是从4到7。
- 想要表达每隔一段时间执行一次任务,使用 “/”, 比如分钟部分中的 “*/10”表示每10分钟运行一次,比如小时部分中的“10-22/2”则表示在早上10点到晚上10点这段时间内,每隔两个小时运行一次。 注意 :当“/”左边的值可以除尽“/”右边的值时,任务才会运行。
例子1:
每天凌晨执行
0 0 * * * root command
例子2:
每周星期天早上五点执行
0 5 * * sun root command
例子3:
每个月的前10天晚上10点开始每隔10分钟执行一次命令
*/10 22 1-10 * * root command
例子4:
从星期一到五,每个小时的第10分钟、第20分钟以及第30分钟都执行一次命令
10,20,30 * * * 1-5 root command
例子5:
从早上10点到晚上10点,每个偶数的小时(比如10点,12点)里每五分钟运行一次命令
*/5 10-22/2 * * * root command
特殊简便写法:
@hourly 代表 0 * * * * ,每个小时运行一次
@daily 代表 0 0 * * * ,每天凌晨运行一次
@weekly 代表 0 0 * * 0 ,每周星期天凌晨运行一次
@monthly 代表 0 0 1 * * ,每个月第一天凌晨运行一次
@yearly 代表 0 0 1 1 * ,每年的头一分钟运行一次
@reboot 重启后执行一次
例子:
每天凌晨运行一次
@daily command
你可以把需要每个小时运行一次的脚本放到/etc/cron.hourly目录下,cron守护进程会每个小时都运行一次。
2.3.限制可以使用cron的用户
在/etc/目录下,可能默认会有cron.allow以及cron.deny文件,也可能没有,没有的情况下可以自己创建,cron.allow文件包含了可以使用cron的用户名,cron.deny文件包含了不可以使用cron的用户名。两个文件中每个用户名占一行,并且不允许出现空格。
root用户在任何情况下都可以使用cron。
假如cron.allow存在,则只有列在这个文件中的用户名可以使用cron,这时候cron.deny被忽视。
假如cron.allow不存在,则列在cron.deny文件中的用户名不可以使用cron。
3.用anacron执行周期性的任务
anacron程序可以周期性的执行任务,但具体执行时间并不确定。可以每天、每周、每个月周期性的执行任务。当anacron的配置文件发生改变时,下一次anacron运行时会检查到配置文件的变化。anacron的配置文件为/etc/anacrontab,编辑需要root权限,默认以下内容:
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
可以看到前三行设置了默认环境,RANDOM_DELAY变量设置了最大延迟执行时间,START_HOURS_RANGE变量设置了anacron任务执行的时间范围,默认在每天的3点到22点之间。最后三行则设置了三条默认的anacron任务,分别是每天执行,每周执行,每月执行。
3.1.anacron文件语法
观察前面三条默认的anacron任务,可以看到一条anacron任务分为四个部分,从左到右依次为:
- 周期(天):设置任务执行的频率,以 天数 为单位,写1则代表每天执行,写3则代表每3天执行,可以使用特殊符号“@”, @daily 代表每天, @weekly 代表每周, @monthly 代表每月。
- 延迟时间:设置任务的延迟时间,以 分钟 为单位,比如写5,则当anacron启动后,anacron等待5分钟就会执行该任务。设置延迟时间是为了当机器启动时不会因为执行很多anacron任务而过载。
- 任务标识:其目的是识别消息,日志文件和执行特殊操作。
- 要执行的命令
在/etc/anacrontab中的三条默认anacron任务中,nice命令用来调整后面命令的优先级,run-parts命令用来执行设置的目录下的所有脚本,就是说这三条任务分别每天,每周,每月执行/etc/cron.daily,/etc/cron.weekly,/etc/cron.monthly目录下的脚本。所以我们不用自己往/etc/anacrontab中添加anacrontab任务,而只需把脚本放到相应的目录下,anacron就会周期性的执行这些脚本了。
3.2.anacron如何运行
既然anacron不是守护进程,那它是如何做到周期性执行任务的呢?在centos7下,cron会运行/etc/cron.d/0hourly,在/etc/cron.d/0hourly文件里,有一条cron任务是这样的:
01 * * * * root run-parts /etc/cron.hourly
这条cron任务会运行/etc/cron.hourly目录下的所有脚本,其中有一个名为 0anacron 的脚本,该脚本则会在合适的时间运行anacron,anacron则会检查/etc/anacrontab,在合适的时间分别运行/etc/cron.daily,/etc/cron.weekly,/etc/cron.monthly目录下的脚本。
系统建立的时间任务配置文件:
vim /etc/crontab 记录“系统中”默认定义的一些计划任务。
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
* * * * * root /bin/echo "111111111" > /dev/pts/0 (直接写命令)
* * * * * root /test/dir1/test.sh (运行单个脚本)
* * * * * root run-parts /test/dir1 (运行目录下的所有可执行程序)
注意,写在这里的时间任务必须指明 运行该命令的用户身份
一般都是 root
run-parts:可以执行某个目录下的所有脚本文件
关于如何在 Linux 中使用 at 和 crontab 命令和linux中at的用法的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于crontab permission denied 解决办法,crontab 进程存在就不执行的方法、django-crontab 运行 python manage.py crontab add 提示 系统找不到指定的路径。、linux centos6 安装 crontab、linux cron crontab anacron 计划任务 定时任务的相关信息,请在本站寻找。
本文标签: