在linux系统的学习工作中,南面会遇到需要延迟进行的任务和需要定时去完成的任务,就像手机的闹钟一样,这时候就需要用到linux系统当中的系统延迟和定时任务的设置了,下文将对延迟和定时任务的设置和使用进行一些介绍。
1、系统延迟任务
系统延迟任务是系统任务将在规定的时间或者在一定时间之后才进行的任务设置,和定时任务不同,这种命令发起的任务都是一次性的。
一般发起延迟任务的命令是"at",例如下图,在目录"/mnt"下有6个文件,需要延迟清空这个目录,则输入"at 时间"按回车后输入"rm -fr /mnt/*",任务输入完成后按"ctrl+d"来完成命令。由图可以看出,在设定的时间之后完成了这个命令。
"at"命令还可以加入一些参数来实现不同的功能,常用的参数例如:
输入"atq"或者"at -l"可以查看已经设置好的延迟任务。
输入"atrm 任务编号"或者"at -d 任务编号"可以删除所设置的延迟任务。
还有一些其他的参数例如,输入"at -c 任务编号"可以查看延迟任务所要执行的命令内容。
"at now+xmin"可以设置命令在延迟x分钟之后进行。"at -f 文件"可以延迟执行文件中的命令内容。例如在文件中写入"mkdir /mnt/test",并在一分钟之后执行。
在使用"at"命令时,会发现不管是普通用户还是超级用户,都可以对主机发起延迟命令,如下图所示,然而在有些情况下,需要对延迟命令的执行权限进行限定。
在对延迟命令的执行权限进行限定是有两种情况,一种是不允许一些用户执行延迟命令,一种是只允许一些用户执行延迟命令,这时就需要用到命令执行的黑名单和白名单。
命令执行的黑名单就是不允许一些用户执行,这需要将用户的名称编写在文件"/etc/at.deny"下,例如下图,将student用户的名称写入这个文件中,则student用户无法再执行延迟命令。但是没有在文件中tom用户不受影响。
命令执行的白名单自然就是允许一些用户执行延迟命令了,值得注意的是,在系统中,这个白名单文件并不存在,需要自己建立建立一个"/etc/ra.allow"文件,这个文件一旦出现,那么所有用户将不能再执行延迟命令,例如下图,文件建立后,没有再黑名单中的tom用户也不能执行延迟命令了。在这个文件中写入"student",那么student用户可以使用延迟命令。
2、定时任务
定时任务就和闹钟类似,是永久存在的,可以循环执行的。定时任务的程序crond,在系统中每分钟做扫描。
一般linux系统中定时任务的发起方式有两种。
2.1、第一种发起方式是通过命令来实现的。常用的命令及其参数有三种,"crontab -u username -e"表示设置一个定时任务,以username的身份运行,"crontab -u username -l"表示查看设置的定时任务,"crontab -u username -r"表示删除设置的定时任务。例如下图,设置一个在"22:30分"执行一个"touch /mnt/file{1..5}"的任务,查看并且删除这个定时任务。
2.2、第二种发起方式是通过编辑文件来实现的。在文件"/etc/cron.d/filename"中编写命令,例如在此文件中输入命令"* * * * * root touch /mnt/root{1..5}"和"* * * * * tom touch /mnt/tom{1..5}"。
2.3、定时任务的执行权力设定。与延迟任务的执行权力设定类似,定时任务执行权力的黑名单设定是编写"/etc/cron.deny"文件,白名单设定是编写"/etc/cron.allow"文件,白名单文件同样是不存在的,需要自己建立。
2.4 设置任务时的时间格式。在上文中可以看出,在设置定时任务时需要设置时间,上文都是"* * * * *",时间的格式是:
* * * * *
分 时 天 月 周
常用的时间格式和意义是:
* * * * * 每隔一分钟
* * */2 * * 每隔两天
* 08-17/2 * * * 早上八点到下午五点每隔两小时
* * 01,15 * 6 每个月的1号,15号以及星期六
05 * * * * 每小时正点过五分钟
05 02 * * * 每天早上2点05分
0 08 01 * * 每个月一号早上8点30分
00 07 25 12 * 12月25日早上7点00分
30 16 * * 5 每个星期五16点30分
*/5 * * * * 每隔五分钟
*/10 9-17 1,15 * * 每个月的1号和15号9点到17点每隔10分钟(17点不会运行)
0 0 1 jan 0 1月1日的0点0分和1月的每个月星期日(不仅是1月1日所在的星期日)
3、系统临时文件的管理
系统在使用服务是,会产生临时文件,这些文件在服务使用完成后或者一段时间后就没有用了,这时就需要对系统产生的临时文件进行管理,及时清除不必要的文件。
在清理文件时,需要先进行设置文件的存在于系统的时间,设置是通过编写"/usr/lib/tmpfiles.d/*.conf"文件来实现的,其中"*"是文件的名称,可以自行设置,但是必须以".conf"结尾。例如在此文件中写入"d /mnt/we 1777 root root 10s",其中"d"是文件类型,"/mnt/we"是清理目录,"1777"是执行权限,"root"和"root"是文件所有人和文件所有组,"10s"是文件存在时间,结合起来,上述内容表示"在/mnt目录下有一个所有人和所有组都是root并且权限为1777的目录we,该目录内的文件可以存在的时间为10s"。这个we目录在系统中是不存在的。
使用"systemd-tmpfiles --create /usr/lib/tmpfiles.d/we.conf",可以建立临时文件目录。"systemd-tmpfiles --clean /usr/lib/tmpfiles.d/we.conf",可以清理该目录下的临时文件。值得注意的是,只有文件存在期限过了的文件可以被清理。例如下图所示,在建立了文件之后,只有过了10s才可以被清理。
上述的系统临时文件管理清理命令需要自己输入,可以和定时任务结合使用,使得自动清理临时文件。例如需要在"/mnt"下建立一个"quit"目录,其中的文件可以存在2min,但是系统将每分钟清理一次这个目录。为了方便,这些步骤可以用脚本来完成,如下图所示。输入"watch -n 1 ls -Rl /mnt"来观察这个目录的变化。
在使用脚本文件后"/mnt"目录下会出现一个"quit"目录,在"4:49:53"在"quit"目录下建立5个文件,这五个文件在"4:52:02"全部被清理。
以上就是linux中常用的延迟任务、定时任务和系统临时文件的管理,及其一点应用。