卢卡因 上市 不久以前 有关cron和crontab的优秀教程 我认为值得分享。 Cron与Windows中的计划任务等效,只有从终端处理。 那些希望使用可视界面实现相同目标的人可以看到此 另一个项目. |
什么是cron?
cron这个名字来自希腊的chronos,意思是“时间”。 在Unix操作系统中,cron是一个常规的后台进程管理器(daemon),它定期运行进程或脚本(例如,每分钟,每天,每周或每月)。 在crontab文件中指定了必须执行的进程以及必须执行的时间。
科莫funciona
cron守护程序从 /etc/rc.d/中 o /etc/init.d中 取决于分布。 Cron在后台运行,每分钟检查一次crontab任务表 / etc / crontab Ø连接 / var / spool / cron 寻找要完成的任务。 作为用户,我们可以添加带有任务的命令或脚本以进行cron自动化某些流程。 例如,这对于自动化系统或良好备份系统的更新很有用。
什么是Crontab?
Crontab是一个简单的文本文件,存储了在用户指定的时间要执行的命令列表。 Crontab将检查应该执行脚本或命令的日期和时间,执行权限,并将在后台执行。 每个用户可以拥有自己的crontab文件,实际上 / etc / crontab 假定它是root用户的crontab文件,当普通用户(甚至root)想要生成自己的crontab文件时,我们将使用crontab命令。
Crontab是在多用户系统上以简单系统用户或root用户身份管理cron任务的最简单方法。
使用crontab
我们从一个简单的例子开始。
我们将使系统更新自动化,以消除“我总是必须更新,但我不喜欢那样的东西!”的烦恼。
首先,我们将编写一个脚本。 此脚本将由cron调用,并将包含我们希望它执行的所有指令,因此在将它包含在cron中之前,有必要以几种情况和几种方式对其进行测试,这是一个简单的更新脚本,如下所示:
#!/ bin / bash#脚本更新示例#选择您的发行版#debian-ubuntu#apt-get更新&apt-get -y升级#fedora #yum -y update #Arch #pacman --noconfirm -Syu
从发行行中删除#。 如果是Ubuntu / Debian,则以apt-get开头。
我们将脚本另存为update.sh(例如,脚本目录位于您的家)。 我们使用以下命令更改所述脚本的执行权限:
chmod a + x〜/脚本/ update.sh
我们运行了几次脚本,以验证一切运行顺利,我们修改了必要的内容(不应包含错误,否则cron只会一遍又一遍地重复一个错误)。 现在将任务添加到我们的crontab中。
将任务添加到crontab
我们使用crontab -e执行crontab的版本,在某些发行版(例如Ubuntu)中,它为我们提供了选择所需文本编辑器的选项,其余的则留给vi。 crontab文件将如下所示。
#mh dom mon dow用户命令
其中:
- m 对应于脚本执行的分钟,取值范围为0到59
- h 确切时间,将处理24小时格式,值的范围是0到23是午夜0:12。
- 礼物 指的是一个月中的某天,例如,如果您想每15天运行一次,则可以指定15
- 窗口 表示星期几,可以是数字(0到7,其中0和7是星期日)或英语中一天的前3个字母:mon,tue,wed,thu,fri,sat,sun。
- 用户 定义将执行命令的用户,可以是root用户,也可以是其他用户,只要他们有权执行脚本即可。
- 命令 指要执行的命令或脚本的绝对路径,例如: /home/usuario/scripts/update.sh,如果它调用脚本,那么它必须是可执行的
为了清楚起见,下面介绍了一些cron任务示例:
15 10 * * *用户/home/user/scripts/update.sh
它将在每天上午10:15运行update.sh脚本
15 22 * * *用户/home/user/scripts/update.sh
它将在每天晚上10:15运行update.sh脚本
00 10 * * 0 root apt-get -y update根用户
它将在每个星期日的上午10:00运行更新
45 10 * * sun root apt-get -y更新
根用户将在每个星期日(星期日)上午10:45运行更新
30 7 20 11 *用户/home/usuario/scripts/update.sh
20月7日30:XNUMX,用户将运行脚本
30 7 11 11 sun用户/home/usuario/scripts/pastel_con_velitas.sh
在11月7日上午30:XNUMX(即星期日),用户将庆祝其sysadmin(即我)
01 * * * *用户/home/usuario/scripts/molestorecordatorio.sh
每天每时每刻的烦人提醒(不建议使用)。
他们仍然可以处理 特殊范围:
30 17 * * 1,2,3,4,5
从星期一到星期五,每天下午5:30。
00 12 1,15,28 **
每个月的第一个,第十五和第12日中午28点(理想的工资单)
如果这令人困惑,则crontab处理 特殊字符串定义这些范围.
@reboot在启动时运行一次
@yearly每年仅运行一次:0 0 1 1 *
@每年与@yearly相同
@monthly每月运行一次,第一天:0 0 1 * *
@weekly每周每周第一个小时的第一分钟。 0 0 * * 0''。
每天@上午12:00 0 0 * * *
@midnight与@daily相同
每小时的第一分钟@hourly:0 * * * *
它的使用非常简单。
@hourly用户/home/user/scripts/molestorecordatorio.sh @monthly用户/home/user/scripts/backup.sh @daily root apt-get更新&& apt-get -y升级
最后但并非最不重要的:
Cron工作管理
crontab文件
用用户定义的文件替换现有的crontab文件
crontab -e命令
编辑用户的crontab文件,每一行将是一个新的crontab任务。
crontab -l
列出所有用户的crontab任务
crontab的-d
删除用户的crontab
crontab -c目录
定义用户的crontab目录(此目录必须具有用户的写入和执行权限)
crontab -u用户
处理另一个用户的crontab的前缀,例如:
$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u用户
与许多其他工具一样,可以在以下位置更深入,更详细地了解该工具:
呃...有点混乱。
* /每30分钟就会丢失30个(在分钟字段中)...
我只是要对此发表评论,直到我决定查看评论😀
此修饰符是非常重要的信息,也非常有用。
您好!
现在,我每45分钟测试一次配置。
* / 45 * * * *,并且该指令在每小时和每小时的45分钟执行一次。 也就是说:
它在3:45,然后4:00、4:45,然后5:00、5:45、6:00、6:45等运行。
我有什么问题吗?我该怎么做,以至于每45分钟一次,或者每小时至少45分钟一次。
您好!
现在,我每45分钟测试一次配置。
* / 45 * * * *,并且该指令在每小时和每小时的45分钟执行一次。 也就是说:
它在3:45,然后4:00、4:45,然后5:00、5:45、6:00、6:45等运行。
我有什么问题吗?我该怎么做,以至于每45分钟一次,或者每小时至少45分钟一次。
您好超级有用的信息,以阐明cron的工作方式。
字节
为*
太好了,谢谢您澄清了cron的工作原理。
据我了解,这条线将在晚上10:15执行,如果我错了,请纠正我
好吧,它说上午10:15
15 22 * * *用户/home/user/scripts/update.sh
你好! 非常好的信息。
要每半小时执行一个脚本,应添加到CronTab的行应为:“ 30 * * * * root Scrip.sh”对吗? 非常感谢!
否。如果我没记错的话,您必须输入/ 30 * * * * root Scrip.sh。
也就是说,在/之前加上/。
干杯! 保罗
您好,我喜欢您的帖子,它很完整,但是我想问您一些事情。
我在使用此命令和“ at”这样的命令时遇到麻烦。
我想在特定时间运行脚本并放入
在-f /home/mi_user/Desk/script.sh 18:08示例
并且脚本不在屏幕上执行,即在终端中执行,是否在后台执行?
对于cron来说,同样的事情发生在我身上,我使用“ crontab -e”编辑crontab文件
最后,我添加以下行:
46 19 my_user /home/mi_user/Desk/script.sh
它什么也不做,也不显示脚本。
有什么建议吗? 非常感谢您,给您带来的不便深表歉意
为了显示终端,您可能必须运行终端并将脚本作为参数传递。
例如:
lxterminal -e“ my_user /home/mi_user/Desktop/script.sh”
使用的参数可能会因您使用的终端仿真器而异。
我希望它能起作用。
拥抱! 保罗
感谢您的贡献。
10点 !!
salu2!
非常感谢您,这对我弄清楚了很多事情,非常感谢,对于更多的细节或疑问,我将在MAN PAGE上再次打个招呼。
男人非常感谢您,我一直在阅读和测试示例。 非常感谢...这是可以理解的。 问候
我使用了ubuntu Server 12.04.2 LTS,并使用了我拥有的crontab版本来删除用户作业列表,即crontab -r(和-l,如本手册所说)。 当然,这是版本问题。
另一方面,我曾经只运行crontab,这种让我创建了自己的执行文件,但这不是正在执行的文件。 运行的是/ etc / crontab中的一个。 也许有人会使用该评论。
PS(我使用locate和whereis crontab进行搜索,但是它仅返回上述地址和另一个加密的文件,因此,如果执行的文件是/ etc / crontab中的文件,但是当我执行crontab -e命令时,我的出现了我定义的所有作业)此文件存储在哪里? 问候。 我总是使用root登录。
优秀,非常有用!
您好,我想这样做…………«15 10 * * * root ifdown eth0»
那就是说,在某个时间网卡被关闭了…………好吧,我把它放在crontab中了,它没用……..怎么了?
Saludosÿ谢谢
您没有在标题“将任务添加到crontab”中定义“ mon”
这篇文章仍然不错,cron非常有用。
那好帖子有多酷,问我
如果我想跟踪任务执行留下的记录,我在哪里可以看到它?
决定我要查看此文件过去执行的操作的历史记录,并且要查看谁修改了该文件以及日期
谢谢
我想检查这个的修改历史
我该怎么做
谢谢
早上好,
我认为在ubuntu脚本中您犯了一个错误,您将ap-get -y升级而不是apt-get -y升级。 (您留下了t)。
问候。
也是如此谢谢!
拥抱! 保罗
我想知道如何创建一个cron文件,以便能够指定每次执行的时间,目录等。
感谢您澄清cron的操作和基本命令,现在请您娱乐一下。
每当我寻找有关Gnu / Linux的任何主题的信息时,我都会四处寻找在这个伟大社区中始终有90%的案例是最好的教程,我认为从现在开始,我将在这里和其他地方开始。
问候
谢谢桑德! 一个拥抱! 保罗
dom =每月的一天
道琼斯指数=星期几
关联起来会更容易
非常感谢,非常完整,并且解释清楚。
这是我的操作系统老师给我们的东西,我什么都没做,现在我明白了为什么课堂如此糟糕..-嗯,这和家庭作业xD一样
估计,
查询,可以限制任务的持续时间吗?
例如,我有一个任务每5分钟重复一次,如果该任务仍处于活动状态,请重复执行该任务,然后杀死它并再次运行。
谢谢,
马塞洛-
你好,马塞洛!
我认为如果您在我们的问答服务中提出这个问题会更好 询问供应商 DesdeLinux 这样整个社区都可以帮助您解决问题。
拥抱,巴勃罗。
好帖子。
每个终端将任务添加到crontab的命令是什么(无需输入crontab并使用'crontab -e'手动添加任务,或将crontab替换为带有'crontab文件'的另一个crontab)。
这个想法是创建一个外部脚本以将任务添加到crontab
谢谢
在我看来,您可以使用“ echo”来添加“ |”。 猫>>'cronotab路径(/ etc / cronotab)'«
表达式每3天将如何准确运行一次
嘿。
我在执行cron作业时遇到问题。
我使用cronta -e运行以下任务:
01 * * * * root /home/user/script/myfile.sh
但是任务没有完成。 我检查了myfile.sh是否具有执行权限,并且执行它的用户是root。
我在/ etc / crontab中运行相同的任务,重新启动服务后,它对我也不起作用。
myfile.sh的内容是用于更新数据库的命令,如果我在控制台中运行它,它将起作用。
知道可能是什么问题吗?
数据库用户可能没有所有权限,因此您首先必须从数据库引擎中导出环境变量。
例如,在db2中,此行将转到脚本的开头
。 /主页/ db2inst1 / sqllib / db2profile
另一个原因可能是脚本需要连接到数据库,在脚本内建立到数据库的连接
我不知道我必须重新启动crond,我已经为此战斗了一段时间
他们将知道如何指示任务在每个月的每个月末在指定的时间运行..详细信息是我无法知道我需要花费每个月的最后一天.. ??? 我不得不一一写下它们,但是当二月底到来时,这对我来说是很复杂的。
美好的一天!!
如何停止crontab中正在执行的进程?
流程*…………
可以帮我吗? 由minha撰写的eu tenho um脚本无法正常运行crontab! 拒绝所有许可,没有私有的cron或可以执行它的用户-几乎什么也没有发生! 我想知道您是否可以帮助我,其他一些事情也无济于事! l
您如何安排任务在该月的最后一天(天:31-30-28)运行?
如您所知,su命令用于在控制台中更改用户。 如果我这样使用su命令:“您的用户”更改用户但没有正确设置“ user”,那么如果我以以下方式运行su:“ su-user”,请通过加载用户设置更改用户。 使用cron可以指示用户,但是如何加载该用户的设置?
如果我想停止它?
你好,
我不知道自己在做什么错,但是我按照这些步骤进行操作,但没有执行任何操作。 我试过了:
59 * * * * / usr / bin / gedit
* * * * * / usr / bin / gedit
* * * * * root / usr / bin / gedit
* * * * * usr / bin / test.sh
* * * * *根usr / bin / test.sh
一无所有。 它不执行任何操作。 我已经重新启动,一切。
非常感谢