Ubuntu下用crontab 部署定时任务shell脚本

1、首先创建一个定时任务:每分钟向屏幕输出"Hello world!"。

有两种实现方式:

1)输入crontab -e命令,根据提示直接在当前cron task文本最后面插入如下命令(记得回车):

* * * * * echo "Hello world!"

2)由于每个用户的定时任务都在/var/spool/cron/crontabs目录下有个与用户名一致的任务文件,因此也可以通过vim直接编辑:

sudo vim /var/spool/cron/crontabs/waterfronter             #注:waterfronter为当前用户名

同样在文件末行插入:

* * * * * echo "Hello world!"

保存退出,并通过crontab -l查看定时任务创建成功。


2、然后等待,若干分钟后发现屏幕并未输出"Hello world!"怎么回事?!

1)刚开始怀疑是cron服务没有启动,遂执行:

sudo service cron status

发现cron服务是running的,排除;

2)继而怀疑是任务文件创建后未能被系统及时get到,因而执行:

sudo service cron restart

重启cron后问题依旧,排除;

3)于是进一步查看cron运行日志(/var/log/cron.log,但是并未找到相关文件,原因是ubuntu默认没有开cron日志,执行命令:

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

找到cron.log相关行,将前面注释符#去掉,保存退出,重启rsyslog:

sudo  service rsyslog  restart

执行less -10 /var/log/cron.log再次查看cron运行日志,log出来了,提示如下信息:

No MTA installed, discarding output

原因是cron把屏幕输出都发送到email了,而当前环境并未安装email server,于是系统报错,解决方面就是不要直接向屏幕输出内容,而是重定向到一个文件。


3、修改任务文件

sudo vim /var/spool/cron/crontabs/waterfronter

将末行改为:

* * * * * echo "Hello world!" >> /tmp/cron_log.txt

保存退出,同时reload cron服务:

sudo service cron reload

若干分钟后查看/tmp/cron_log.txt,“Hello world!”每隔一分钟输出一次,问题解决。



命令总结:


用以下的方法启动、关闭这个cron服务: 
service cron start //启动服务 
service cron stop //关闭服务 
service cron restart //重启服务 
service cron reload //重新载入配置

查看crontab服务状态:service cron status 
手动启动crontab服务:service cron start 


新增调度任务可用两种方法: 
1)、在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。 
2)、直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务。 
crontab -e配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务 
查看调度任务 
crontab -l //列出当前的所有调度任务 
crontab -l -u jp //列出用户jp的所有调度任务 
删除任务调度工作 
crontab -r //删除所有任务调度工作 


* * * * * echo "Hello world!" 中“*”的解释:

minute - 从0到59的整数 

hour - 从0到23的整数 
day - 从1到31的整数 (必须是指定月份的有效日期)
month - 从1到12的整数 (或如Jan或Feb简写的月份)
dayofweek - 从0到7的整数,0或7用来描述周日 (或用Sun或Mon简写来表示)
command - 需要执行的命令(可用as ls /proc >> /tmp/proc或 执行自定义脚本的命令) 

除了数字还有几个特殊的符号:"*"、"/"和"-"、","

  • *代表所有的取值范围内的数字
  • "/"代表每的意思,"/5"表示每5个单位
  • "-"代表从某个数字到某个数字
  • ","分开几个离散的数字

例子:

15,30,45,59 * * * * echo "xgmtest....."     表示,每隔15分钟,执行一次打印命令 

每天早上 6
0  6  * * * echo  "Good morning."  >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。
 
每两个小时(第一个为 15 ,指明没两个小时的第 15 min中执行一次)
15  */ 2  * * * echo  "Have a break now."  >> /tmp/test.txt 
 
晚上 11 点到早上 8 点之间每两个小时和早上八点
0  23 -7 / 2 8  * * * echo  "Have a good dream"  >> /tmp/test.txt
 
每个月的 4 号和每个礼拜的礼拜一到礼拜三的早上 11
0  11  4  1 -3  command line
 
1 1 日早上 4
0  4  1  1  * command line
 
每小时(第一分钟)执行/etc/cron.hourly内的脚本
01  * * * * root run-parts /etc/cron.hourly
 
每天(凌晨 4 02 )执行/etc/cron.daily内的脚本
02  4  * * * root run-parts /etc/cron.daily
 
每星期(周日凌晨 4 22 )执行/etc/cron.weekly内的脚本
22  4  * *  0  root run-parts /etc/cron.weekly
 
每月( 1 号凌晨 4 42 )去执行/etc/cron.monthly内的脚本
42  4  1  * * root run-parts /etc/cron.monthly
 
注意:   "run-parts" 这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名。  
 
每天的下午 4 点、 5 点、 6 点的 5  min、 15  min、 25  min、 35  min、 45  min、 55  min时执行命令。
5 15 25 35 45 55  16 17 18  * * * command
 
每周一,三,五的下午 3 00 系统进入维护状态,重新启动系统。
00  15  * * 1 3 5  shutdown -r + 5
 
每小时的 10 分, 40 分执行用户目录下的innd/bbslin这个指令:
10 40  * * * * innd/bbslink
 
每小时的 1 分执行用户目录下的bin/account这个指令:
1  * * * * bin/account
 
每天早晨三点二十分执行用户目录下如下所示的两个指令(每个指令以;分隔):
203  * * * (/bin/rm -f expire.ls logins.bad;bin/expire$#@ 62 ;expire. 1 st)  
 
每年的一月和四月, 4 号到 9 号的 3 12 分和 3 55 分执行/bin/rm -f expire. 1 st这个指令,并把结果添加在mm.txt这个文件之后(mm.txt文件位于用户自己的目录位置)。
12 , 553  4 -91 , 4  * /bin/rm -f expire. 1 st$#@ 62 ;$#@ 62 ;mm.txt


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w_iceh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值