Linux下设置定期执行脚本

发布时间:2022-11-12 00:10:17阅读:38次
下面针对的是非ubuntu环境,会在文章末尾介绍ubuntu的一些区别。在Linux下,经常需要定期的执行一些脚本从而来实现一些功能。在Linux下我们用crontab来实现定期的执行脚本这个功能,下面就介绍一下crontab的使用。以及我遇到的一些问题一.crontab的使用说明1.crond是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。而linux任务调度的工作主要分为以下两类a.系统执行的工作,比如垃圾清理,备份b.用户自定义的工作,比如每5分钟执行一次脚本2.crontab是UNIX系统下定期执行任务的触发器。用户把要定期执行的任务记录在这个文件下面,然后crond定期的去检查这个定期执行列表,有要执行的工作时便自动执行。通过mancrontab可以查看到下面的信息a./etc/crond.allow表示的是允许使用crontab的用户列表b./etc/crond.deny表示的是不允许使用crontab的用户列表3.crontab常用的几个命令格式crontab-l//显示用户的crontab文件的内容crontab-e//编辑用户的crontab文件的内容crontab-r//删除用户的crontab文件4.crontab文件的基本格式如下所示*****command分时天月周命令每列表示意义a.第一个*表示的是分钟1~59分钟,默认*表示的是每分钟都执行,x-y表示的是x~y这段每分钟都执行,*/n表示每n分钟执行一次,x,y,z表示的是x,y,z分钟都执行。b.第二个*表示的是小时1~23小时,默认*表示的是每小时都执行,x-y表示的是x~y这段每小时都执行,*/n表示每n小时执行一次,x,y,z表示的是x,y,z小时都执行。c.第三个*表示的是天1~31,默认*表示的是每天都执行,x-y表示的是x~y这段每天都执行,*/n表示每n天执行一次,x,y,z表示的是x,y,z天都执行。d.第四个*表示的是月1~12,默认*表示的是每个月都执行,x-y表示的是x~y这个段每月都执行,*/n表示每n分钟执行一次,x,y,z表示的是x,y,z天都执行。e.第五个*表示的是周0~6(0表示周天),默认周一~周天都执行,x-y表示周x~周y每天都执行。5.crontab文件的一些例子a.3021***/usr/local/etc/rc.dghttpdrestart//表示每天21:30重启apacheb.4541,10,22**/usr/local/etc/rc.dghttpdrestart//表示每月1,10,22号4:45重启apachec.0,3018-23***/usr/local/etc/rc.dghttpdrestart//表示每天18:00至23:00之间每隔30分钟重启apached.**/1***/usr/local/etc/rc.dghttpdrestart//表示每一小时重启apachee.*/5****/usr/local/etc/rc.dghttpdrestart//表示每5分钟重启apache二.具体例子1.首先我在/homeenguolin/tmp/创建一个shell脚本名为s.sh。注意脚本内部的路径使用绝对路径。这个脚本的功能就是把当前的日期输出重定向到当前目录下的out文件2.然后设置每2分钟执行一次这个脚本,>/dev/null2>&1。原因是因为系统会在每次执行完任务之后就发一个邮件告诉用户,通过这个操作可以把信息全部重定向到/dev/null中,/dev/null这个文件类似回收站过一段时间系统自动清理。*/2****sh/homeenguolin/tmp/s.sh>/dev/null2>&1然后发现过了n个2分钟,out文件根本就没有输出。3.在谷歌/百度无果之后,问了同事,得到了原因是因为crontab可能有时候没有办法执行用户家目录下面的两个文件,分别是.bashrc和.bash_profile这两个文件的作用如下.bashrc作用是用于你的bashshell的bash信息,当登录时及每次打开新的shell时,该文件被读取;.bash_profile作用是每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件,因此我们要手动在crontab文件中添加source/homeenguolin/.bashrc&&source/homeenguolin/.bash_profilesource的作用是当前bash环境下执行命令,而scripts是启动一个子shell来执行命令。这样如果把设置环境变量(或alias等等)的命令写进scripts中,就只会影响子shell,无法改变当前的BASH,所以通过文件(命令列)设置环境变量时,要用source命令。因此crontab文件中变成*/2****source&&/homeenguolin/.bashrc&&source/homeenguolin/.bash_profile&&sh/homeenguolin/tmp/s.sh>/dev/null2>&14.发现可以定时的执行脚本。如果还不行,那只能通过查找log来查错。非ubuntu的Linuxcrond的日志文件保存在ar/log下三.ubuntu下使用crontab定时执行脚本注意下几个问题以1.ubuntu下crontab的服务程序是cron,并且默认cron服务的log是没有的,我们必须手动开启a.sudovim/etc/rsyslog.d/50-default.confb.找到cron.*那一行把注释去掉c.然后重启cron服务sudoservicecronrestartd.这样就可以在ar/log里面发现有cron的日志文件了,我们就可以通过查看日志文件找到问题所在2.ubuntu下,用户家目录下是没有.bash_profile文件的,并且会自动去执行.bashrc文件,只要写成下面这样即可*/2****sh/homeenguolin/tmp/s.sh>/dev/null2>&1

本文来自系统大全为您提供如需转载请注明!推荐win10下载