欢迎登陆真网站,您的到来是我们的荣幸。 登陆 注册 忘记密码? ☆设为首页 △加入收藏
欢迎加入真幸福QQ群
电脑知识: 基础知识 网络技术 操作系统 办公软件 电脑维修 电脑安全 windows7 windows8 windows10 服务器教程 平板电脑 视频播放教程 网络应用 互联网 工具软件 浏览器教程 QQ技巧 输入法教程 影视制作 YY教程 wps教程 word教程 Excel教程 PowerPoint
云南西双版纳特产小花糯玉米真空包装


win7如何将磁盘碎片整理服务给关闭了
同步推2.2.0无限金币汉化游戏任你下
win7旗舰版下载后发现桌面空白怎么办
win7下载后音量大小调整不了该怎么办
Win7系统右键点击计算机没有属性选项怎么办
用date命令修改Linux系统的时间为什么无效
如何查看Linux下默认的DNS
linux使用快照制作虚拟机
linux文件名查找which,whereis,locate
Win8系统巧用自带解压缩工具
Linux下设置定期执行脚本
【 来源:网络 】【 点击:1 】 【 发布时间:2017_03_03 08:59:59 】

   在Linux下,经常需要定期的执行一些脚本从而来实现一些功能。

  在Linux下我们用crontab来实现定期的执行脚本这个功能,下面就介绍一下crontab的使用。以及我遇到的一些问题

  一. crontab的使用说明

  1. crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。而linux任务调度的工作主要分为以下两类

  a. 系统执行的工作,比如垃圾清理,备份

  b. 用户自定义的工作,比如每5分钟执行一次脚本

  2. crontab是UNIX系统下定期执行任务的触发器。用户把要定期执行的任务记录在这个文件下面,然后crond定期的去检查这个定期执行列表,有要执行的工作时便自动执行。

  通过man crontab可以查看到下面的信息

  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. 30 21 * * * /usr/local/etc/rc.d/lighttpd restart //表示每天21:30重启apache

  b. 45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart //表示每月1,10,22号4:45重启apache

  c. 0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart //表示每天18 : 00至23 : 00之间每隔30分钟重启apache

  d. * */1 * * * /usr/local/etc/rc.d/lighttpd restart //表示每一小时重启apache

  e. */5 * * * * /usr/local/etc/rc.d/lighttpd restart //表示每5分钟重启apache

  二. 具体例子

  1. 首先我在/home/chenguolin/tmp/ 创建一个shell脚本名为s.sh。注意脚本内部的路径使用绝对路径。

  这个脚本的功能就是把当前的日期输出重定向到当前目录下的out文件

  2. 然后设置每2分钟执行一次这个脚本,>/dev/null 2>&1。原因是因为系统会在每次执行完任务之后就发一个邮件告诉用户,通过这个操作可以把信息全部重定向到/dev/null中,/dev/null这个文件类似回收站过一段时间系统自动清理。

  */2 * * * * sh /home/chenguolin/tmp/s.sh >/dev/null 2>&1

  然后发现过了n个2分钟,out文件根本就没有输出。

  3. 在谷歌/百度无果之后,问了同事,得到了原因是因为crontab可能有时候没有办法执行用户家目录下面的两个文件,分别是.bashrc和.bash_profile

  这两个文件的作用如下

  .bashrc作用是用于你的bash shell的bash信息,当登录时及每次打开新的shell时,该文件被读取;

  .bash_profile作用是每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件,

  因此我们要手动在crontab文件中添加source /home/chenguolin/.bashrc && source /home/chenguolin/.bash_profile

  source的作用是当前bash环境下执行命令,而scripts是启动一个子shell来执行命令。这样如果把设置环境变量(或alias等等)的命令写进scripts中,就只会影响子shell,无法改变当前的BASH,所以通过文件(命令列)设置环境变量时,要用source 命令。

  因此crontab文件中变成

  */2 * * * * source && /home/chenguolin/.bashrc && source /home/chenguolin/.bash_profile && sh /home/chenguolin/tmp/s.sh >/dev/null 2>&1

  4. 发现可以定时的执行脚本。

  如果还不行,那只能通过查找log来查错。非ubuntu的Linux crond的日志文件保存在/var/log下

  三. ubuntu下使用crontab定时执行脚本

  注意下几个问题以

  1. ubuntu下crontab的服务程序是cron,并且默认cron服务的log是没有的,我们必须手动开启

  a. sudo vim /etc/rsyslog.d/50-default.conf

  b. 找到cron.*那一行把注释去掉

  c. 然后重启cron服务 sudo service cron restart

  d. 这样就可以在/var/log里面发现有cron的日志文件了,我们就可以通过查看日志文件找到问题所在

  2. ubuntu下,用户家目录下是没有.bash_profile文件的,并且会自动去执行.bashrc文件,只要写成下面这样即可

  */2 * * * * sh /home/chenguolin/tmp/s.sh >/dev/null 2>&1

本网站由川南居提供技术支持,fkzxf版权所有 浙ICP备12031891号
淳安分站 淳安分站