Linux下设置定期执行脚本
下面针对的是非ubuntu环境,会在文章末尾介绍ubuntu的一些区别。
在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重启apacheb. 45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart //表示每月1,10,22号4:45重启apachec. 0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart //表示每天18 : 00至23 : 00之间每隔30分钟重启apached. * */1 * * * /usr/local/etc/rc.d/lighttpd restart //表示每一小时重启apachee. */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_profilesource的作用是当前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>&14. 发现可以定时的执行脚本。如果还不行,那只能通过查找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
总结:
crontab -e
30 18 * * * /bin/sh /home/zhuyong/share/script/Blink_NS010.sh | tee /home/zhuyong/share/Blink_NS010_build.log 2>&1
Linux下设置定期执行脚本相关推荐
- linux下设置定时执行脚本
linux下设置定时执行脚本 1.首先安装所需程序并启动 crontabs是设置周期性被执行的指令 yum install vixie-cronyum install crontabsservice ...
- PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)...
源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...
- Linux下Crontab定时执行命令
Linux下Crontab定时执行命令 目录 Crontab概述及安装 Crontab规则 常见例子 1. Crontab概述及安装 1. Crontab指令是Linux下执行定时任务的一个命令. 2 ...
- hudson linux节点,在Linux下设置Hudson进行连续集成
在Linux下设置Hudson持续集成 哈德森监督执行重复的工作,例如建立一个软件项目或由cron运行的工作. 本文介绍如何在Linux上进行设置. 1准备 1.创建目录结构如下: /var/huds ...
- Linux下的lds链接脚本详解
一. 概论 每一个链接过程都由链接脚本(linker script, 一般以lds作为文件的后缀名)控制. 链接脚本主要用于规定如何把输入文件内的section放入输出文件内, 并控制输出文件内各部分 ...
- 手把手教学Linux下oracle11g自动化安装脚本编写
手把手教学Linux下oracle11g自动化安装脚本编写 产品:Oracle 版本:11.2.0.4 环境:Centos7 文章目录 手把手教学Linux下oracle11g自动化安装脚本编写 0. ...
- linux系统中建立网络白名单,Linux下设置防火墙白名单(RHEL 6和CentOS 7)的步骤
进入Linux 命令行,编辑防火墙规则配置文件 iptables vi /etc/sysconfig/iptables 下面是一个白名单设置的例子: # Firewall configuration ...
- ./ . 和#!/bin/bash 辨析Linux如何选择当前执行脚本的shell
最近遇到一个有趣的问题,让我搞清楚Linux如何选择当前执行脚本的shell 执行cts的的 media stress test 需要安装 android-cts-media-1.0.zip 把这个文 ...
- Linux下Apache自动监测重启脚本
Linux下Apache自动监测重启脚本(智能化程度较高) 本站原创 [基于 署名-非商业使用-相同方式分享 2.5 协议,转载须注明链接] 本文所述apache监控脚本已经过VPS管理百科验证 由于 ...
- 怎么设置linux端口权限,Linux下设置端口权限的系统调用—ioperm和iopl
Linux 下设置端口权限的系统调用有两个: ioperm 和 iopl . 一. ioperm 和 iopl 介绍. 1.ioperm 该系统调用的介绍参考了以下链接中的内容: http://blo ...
最新文章
- leetcode002 add_two_numbers
- HDLBits 系列(19) 12小时时钟的Verilog设计
- 程序显示文本框_python PDF转成图片小程序
- [转]COM对象创建-外部机制
- 使用睡袋_睡袋能用几十年?!只要你照着做(一)
- linux驱动helloworld
- Android之解决androidx.appcompat.widget.Toolbar去掉左边距
- TCP连续ARQ协议和滑动窗口协议
- 7-9 根据后序和中序遍历输出先序遍历 (10 分)
- MiniGUI编程--列表框
- 20191011:冒泡排序的改良版--Shaker排序
- 从光波叠加到条纹分布的matlab仿真,matlab光学仿真实验 13171019
- 基于单片机的交通信号灯控制系统设计
- Source Code Pro一款堪称完美的编程字体
- outlook2010 pst文件过大解决办法
- 跨专业考计算机研究生有专业限制吗,我想跨专业考计算机专业研究生
- 亿道丨三防手机丨手持终端丨零售行业如何选择手持工业终端设备?
- 遗传算法解决tsp问题(基于python)
- 三菱4轴控制伺服案例,三菱PLC FX3U加三菱1PG定位模 块控制4个松下伺服,有完整的注释,结构清晰明了。伺服控制程序JOG HOME 定位 全部写成了功能块FB .你可以直接拿过去用
- 使用 ChatterBot 做简单的机器人
热门文章
- Struts框架(一)
- WPF版的Dock控件第二版完成
- .NET中栈和堆的比较
- kafka windows单机安装测试
- 使用apache benchmark(ab) 测试报错: apr_socket_recv: Connection timed out (110)
- 设计模式之禅——模板方法模式钩子方法
- 管理软raid磁盘队列
- 公开课视频-《第01章 规划》-大企业云桌面部署实战-在线培训-视频(奉献)
- DevExpress控件TExtLookupComboBox实现多列模糊匹配输入的方法
- 2013第44周日小结