solaris系统的crontab定时任务

cron的官网手册:

https://docs.oracle.com/cd/E26926_01/html/E29115/cron-1m.html#REFMAN1Mcron-1m

crontab的官网手册:

https://docs.oracle.com/cd/E26926_01/html/E29113/crontab-1.html#scrolltoc

You can specify regularly scheduled commands to cron according to instructions found in crontab files in the directory /var/spool/cron/crontabs.

crontab命令通过写/var/spool/cron/crontabs/目录下的通过用户名命名的文件,来告诉系统什么时间执行哪些命令。

注:如果没有文件,说明该用户没有定时任务。这就是问什么执行 crontab -l 提示

  1. crontab介绍(重要,必读)

本脚本的执行使用了Unix/Linux的定时任务crontab来执行,测试人员务必熟悉crontab的使用。

crontab是操作系统为每个用户所创建的一个定时任务表,在这个定时任务表中的任务会按照用户指定的时间段去执行。本文的脚本使用omcrftp用户(非mr文件清理)或者mrftp用户(mr文件清理)执行,所以在查看、编辑以及修改crontab时,都需要使用omcrftp或者mrftp用户,而不是root或者其他用户。

    1. 查看定时任务表

使用  crontab 命令可以查看当前用户的定时任务表,比如如下:

30 0 * * * /export/home/omcrftp/move_cdl_file.sh

每一行前边如果以“#”开始,表示为注释行。每一行的输出有6列,本脚本只使用了第一、第二和第六列,其他列的作用暂时不用管。

第一列和第二列分别表示执行开始时间的分钟、小时,第六列是需要执行的命令行。比如上边的输出就是表示每天0点30分执行/export/home/omcrftp/move_cdl_file.sh脚本。

    1. 修改及重启定时任务表

可以使用参数进行定时任务表的在线修改,但这里不建议这样修改,建议使用先将任务表内容输出到文件,然后修改文件在进行加载的方式进行修改任务表。

crontab l > mytask

这样就会把定时任务的内容输出到mytask文件中,然后使用vi编辑,如果不会使用vi,则可以将该文件传出来,使用ue编辑器修改,切记必须使用unix格式,勿转换为Dos格式,修改完成后的文件我们假设命名为mytasknew,然后使用crontab重新加载这个文件即可,命令如下:

crontab mytasknew

 

 

/usr/bin/crontab -e   打开编辑器,可以在线编辑该用户的crontab内容。
 

我记得crontab 命令最初可以直接跟时间和命令,如:

crontab */1 * * * * service httpd restart

但是现在好像这种用法被废弃了,所有网上资料的介绍都是先创建一个文本文件,在文本文件里编辑好时间格式和要执行的命令。最后再执行:

crontab filename

时间的格式可以参考linux的说明:

https://blog.csdn.net/qq_32923745/article/details/78286385

至此可以实践一下。先看一下高手写的crontab文件,简单明了,前5个值是时间,分、时、日、月、周,后面的路径和文件是可执行的命令或sh脚本。如果脚本还有参数,可以加空格写上参数,如第3、4行。

30 0 * * * /export/home/omcrftp/cdlscript/move_cdl_task/move_cdl_file.sh

 

 

select_userjob.sh脚本内容:

#!/bin/sh
sqlplus /nolog << EOF

spool select.txt
conn omcr/lte;
@select_job.sql
spool off
exit
EOF

select_job.sql脚本内容:

Select job, last_date, last_sec, next_date, next_sec from user_jobs where what like '%cp_all_north()%';

Select job, total_time, broken, failures from user_jobs where what like '%cp_all_north()%';

使用crontab定时执行脚本时别忘了输出重定向>

如果crontab不重定向输出,并且crontab所执行的命令有输出内容的话,是一件非常危险的事情。因为该输出内容会以邮件的形式发送给用户,内容存储在邮件文件

/var/mail/root

(上述为solaris系统的路径)

如果命令执行比较频繁(如每分钟一次),或者命令输出内容较多,会使这个邮件文件不断追加内容,文件越来越大。而邮件文件一般存放在根分区,根分区一般相对较小,所以会造成根分区写满而无法登录服务器。

所以在添加crontab命令时,无论命令是否有输出,最好都加上输出重定向到文件或者/dev/null中。如下

*/5 * * * * /root/XXXX.sh &>/dev/null 2>&1

/dev/null 代表空设备文件
> 代表重定向到哪里,例如:echo "123" > /home/123.txt
1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
2 表示stderr标准错误
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1

那么>/dev/null 2>&1的意思就是:
标准输出重定向到空设备文件,也就是不输出任何信息到终端,标准错误输出重定向等同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值