linux(cron)任务计划
定时执行某些任务
1,一次性任务计划,at,batch
2,周期性任务接好,cron
先说一次性任务计划:at:输入内容,
at time
batat>
ctrl+d提交,最终作业结果:以邮件形式发送给系统上的当前用户
请看收发邮件:
查看25号端口是否开启,netstat -tnl | grep ":25\>"
25端口
确保服务是启动的,才能收到邮件
[root@localhost ~]# netstat -tnl | grep ":25\>"
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 ::1:25 :::* LISTEN
[root@localhost ~]#
默认收发邮件仅在本机上的用户进行,且只能通过回环接口上的地运行
mial可以查看邮件缓冲,输入邮件编号查看邮件
q:命令退出
注意:查看后邮件将会被移到用户的家目录
mail 跟上用户名@主机:发邮件
-s“指明主题”
#echo "how are you " | mail "test mail" 主机名
时间格式的介绍:
time 格式
精确时间;
HH:MM
模糊时间:
NOW+#unit
noon
midnight
teatime
tomorrow
查看计划任务队列:
作业队列查看:
at -l查看作业队列的查看
atq 查看
删除尚未运行的作业:
at -d [JOB_NUM ], at rm
把at要执行的所有任务放置于文件中,让at读取此文件作为要运行的任务;
batch :无须指定时间,会自动在将来的某个系统资源较空闲的时间点运行
周期性任务计划:cron
centos 5:vixie-cron
centos 6: cronie
依赖于后台服务,查看运行状态
#service crond status
若显示is running....则服务正常运行
crond:cron daemon
cron任务有两类:
系统cron:/etc/crontab
用户cron:定义在/var/spool/cron/目录中与用户名同名的文件中
每行定义一个独立任务
守护进程是读取这些任务作业的配置文件来完成任务的。
cat /etc/crontab:文件任务定义格式
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59) 分钟
# | .------------- hour (0 - 23) 小时
# | | .---------- day of month 天
month (1 - 12) OR jan,feb,mar,apr ... 月
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat 周几
n,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
时间点:周期性时间点
username:用户身份
command:要运行的任务
注意:建议在定义cron任务时所用到的命令使用绝对路径:如果脚本,脚本中命令使用绝对路径,或自定义一个拥有完整路径的环境变量
时间点:分钟,小时,天,月,周几
一般而言第三4个时间点和第五个时间点不会同时使用,因为这两个满足很困难,隐藏域关系
比如:二月三号七点四分,自右而左
4 7 3 2 *
每年: 2 3 4 5 * 5月4号三点二分
每月: 20 18 6 * * 每月的6号18点20
每天: 20 9 * * * 每天9点20
每小时:3 * * * * 每小时三分钟
每分钟:* * * * * 每分钟
每周: 16 17 * * *
时间表示法:
1,每个时间位都应该使用其可用的有效取值范围内的值;*就用于表示使用其所有有效取值;
17 * * * * /bin/echo "howdy" 每小时17分钟 每小时任务
8 9 * * * /bin/echo "howdy" 每天9点八分任务 每天
16 17 * * 3 /bin/echo "howdy" 每周三的17点16分 每周任务(每周任务必须在周位上输入周几)
2,*/#,在对应的时间位有效取值上每#个时间单位一次
*/3 * * * * /bin/echo "howdy" 每三分钟运行一次
9 */3 * * * /bin/echo "howdy" 每三小时内每9分钟运行一次
*/7 * * * * /bin/echo "howdy" 每7分钟运行一次(无法等值)
注意:并不能精确做到每七分钟一次;
3,连续时间点: -
周一到周五每天凌晨3点40分运行
40 3 * * 1-5 /bin/echo "howdy"
4,离散时间点:
周二,4,6,2点30分运行
30 2 * * 2,4,6 /bin/echo "howdy"
任务运行后的结果:邮件发送给任务的相关用户:
丢弃邮件通知:输出重定向
> /dev/null (把任务的正常结果丢弃)
&> /dev/mull (全部丢弃)
*,/dev/null:软件模拟出的设备,bit bucket,数据黑洞
如何定义cron任务
crontab命令:
-l :列出已经定义的所有任务
-e :打开编辑界面定义任务
-r : remove,移除所有任务(删除一个任务应该通过编辑界面删除行实现)
-u 用户 -e :为用户定义任务
任务保存的文件在:/var/spool/cron/”user“下,也可在目录下直接新建任务文件
-u username:用户身份
-l
-e
-r
注意:如果crontab中的用户命令中需要使用%时,需要对其进行转义
* * * * * /bin/touch file-$(date +\%F-\%H-\%M-\%S)
* * * * * /bin/touch file-$(date +'%F-\%H-\%M-\%S')
2 */4 * * * /bin/cp -a /backup/etc-$(date +%T+%F) > /dev/mull
2 1 * * 2,4,6 /bin/cp -a /var/log/messages /backup/messages_logs/messages-20150402
1 */2 * * /bin/grep "^S" /proc/meminfo >> /stats/memory.txt
anacron:为cron提供了补充:
facl:
File ACL
在非root用户下,使用file acl,可以让用户为指定文件添加出了基本访问控制功能之外扩展授权机制;
*在系统安装时挂载指定启用facl机制
getfacl FILE...
[root@localhost ~]# getfacl install.log
# file: install.log
# owner: root
# group: root
user::rw-
group::r--
other::r--
[root@localhost ~]#
setfacl -m 目标:权限 file...
目标:用户:u:user
组:g:group
权限:读写执行
取消:setfacl -x 目标 file...
-r:递归授权或取消授权
访问控制列表可被继承,使用默认访问控制列表来实现
启动facl之后的权限应用模型
属主: -->
用户级别的facl -->
属组 -->
组界别的facl --->
other