定时任务(面试题)

1.1 定时任务

1.1.1 选择

1.1.1.1 Linux下Crontab文件,每个域之间用空格分割,其排列如下正确的是:B

A.MIN HOUR DAY MONTH YEAR COMMAND
B.MIN HOUR DAY MONTH DAYOFWEEK COMMAND
C.COMMAND HOUR DAY MONTH DAYOFWEEK
D.COMMAND YEAR MONTH DAY HOUR MIN

1.1.1.2 编辑root任务调度命令 :C

A.crontab -l
B.crontab -E
C.vim /var/spool/cron/root

1.1.1.3 cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业,其基本格式为:_* * * * * command____,其中第五个星号代表C

A.分钟
B.小时
C.星期
D.日期

1.1.1.4 以下crontab命令在何时会执行(D)

05 01 * * 1 sh /data/nginx_log/ftp_nginxlog.sh >/dev/null/ 2>&1
A.每天一点五分
B.每天五点一分
C.每星期一五点一分
D.每星期一一点五分

1.1.2 填空

1.1.2.1 由crontab命令定制(crontab -e)执行test用户家目录下的程序sum的格式为:* * * * /home/test/sun
1.1.2.2 Linux系统计划任务编辑命令crontab -e 或vim /var/spool/cron/root

1.1.3 简答

1.1.3.1 以下字段可能和哪个服务有关,表示什么意思

*/5 * * * * ping -c 100 www.wanmei.com > /root/network.log 2>&1

服务:定时任务与域名解析
意思:每个五分钟ping万维网100次;不管是否连通都将结果定向到/root/network.log文件中

1.1.3.2 如何备份生产环境的定时任务?(生产环境的定时任务默认跑在root用户下)

生产环境:线上环境,用户正在使用的环境
备份:/var/spool/cron/或/var/spool/cron/root

1.1.3.3 写一条计划任务,在每天晚上的3:05分执行脚本/usr/script/tongji.sh
[root@oldboyedu59 ~]# crontab -e 
#sh /usr/script/tongji.sh  by ylz at 2019-4-28
05 03 * * *   sh /usr/script/tongji.sh   >>/tmp/sh.log   2>&1
1.1.3.4 crontab里0 2 * * 1 /data/postmall/shell/a.sh表示什么含义?

表示每周一凌晨2点整执行脚本/data/postmall/shell/a.sh

1.1.3.5 写一条crontab条目,每天的22点钟删除/test/下的所有文件
[root@oldboyedu59 ~]# crontab -e 
# rm /test/*   by ylz at 2019-4-28
00 22 * * *     rm   /test/*   >>/tmp/sh.log   2>&1
1.1.3.6 某系统管理员需每天做一定的重复工作,请按照下列要求,编织一个解决方案:

(1) 在下午4:50删除/abc目录下的全部子目录和全部文件

[root@oldboyedu59 ~]# crontab -e 
# rm /abc/*  by ylz at 2019-4-28
50 16 * * *   rm -rf  /abc/*   >>/tmp/sh.log   2>&1

(2) 每逢星期一下午5:50将/data目录下的所有目录和文件归档并压缩为文件:backup.tar.gz

[root@oldboyedu59 ~]# crontab -e 
#bak /data  by ylz at 2019-4-28
50 17 * * 1  tar zcf /tmp/backup-`date +\%F`.tar.gz  /root/   >>/tmp/sh.log   2>&1
1.1.3.7 在每周6的凌晨3:15执行/home/shell/collect.pl,并将标准输出和标准错误输出到/dev/null设备,请写出crontab中的语句

.pl perl 脚本 用prel运行

.py python 脚本 用Python 执行

[root@oldboyedu59 ~]# crontab -e 
#/home/shell/collect.pl  by ylz at 2019-4-28
15 03 * * 6   prel /home/shell/collect.pl   >/dev/mull   2>&1
1.1.3.8 设计一个shell程序,每月第一天执行

假设这个shell程序脚本为shell.sh

00 00 1 * *    sh  shell.sh     >>/tmp/sh.log   2>&1
1.1.3.9 有一个/opt/backup.sh脚本,如何在10月的每天早上06到18每3小时执行并在13点单独执行一次。
[root@oldboyedu59 ~]# crontab -e 
#sh /opt/backup.sh   by ylz at 2019-4-28
00 06-18/3,13 * 10 *   sh /opt/backup.sh   >>/tmp/sh.log   2>&1
1.1.3.10每个月的一号,零点十五执行脚本/usr/bin/httpd.sh,如何实现?
[root@oldboyedu59 ~]# crontab -e 
#sh /usr/bin/httpd.sh   by ylz at 2019-4-28
15 00 1 * *   sh /usr/bin/httpd.sh   >>/tmp/sh.log   2>&1
1.1.3.11在11月份内,每天的早上6点到12点中,每隔2小时执行一次/ust/bin/httpd.sh 怎么实现
[root@oldboyedu59 ~]# crontab -e 
#sh /usr/bin/httpd.sh   by ylz at 2019-4-28
00 06-12/2 * 11 *   sh /usr/bin/httpd.sh   >>/tmp/sh.log   2>&1
1.1.3.12linux服务器,如何实现每天早上5点重启
[root@oldboyedu59 ~]# crontab -e 
#reboot Linux   by ylz at 2019-4-28
00 05 * * *   /sbin/reboot   >>/tmp/sh.log   2>&1
1.1.3.13在11月份每天早晨6点到10点 每隔两个小时 执行/usr/bin/httpd.sh
[root@oldboyedu59 ~]# crontab -e 
#sh /usr/bin/httpd.sh   by ylz at 2019-4-28
00 06-10/2 * 11 *   sh /usr/bin/httpd.sh   >>/tmp/sh.log   2>&1
1.1.3.14/var/www/html/是网站的发布目录。如何每天凌晨0点30对其进行自动备份。写出操作步骤?

将打包压缩文件命令:tar zcf /tmp/www.bak-date +%F.tar.gz /var/www/html/ 写入脚本/server/scripts/bak-www.sh中

[root@oldboyedu59 ~]# crontab -e 
#bakwww   by ylz at 2019-4-28
30 00 * * *   sh  /server/scripts/bak-www.sh    >>/tmp/bakwww.log   2>&1
1.1.3.15用一普通用户想在每周日零点零分定期备份/user/backup 到 /tmp 目录下,该用户应如何做?
crontab -u oldboy -e 然后输入备份内容
1.1.3.16Unix系统上需要创建以下crontab定时任务:在每周5的凌晨1:10执行命令,将当时系统中含有“asiainfo” 关键字的进程信息查询处理,并追加记录到/progress.log文件中
[root@oldboyedu59 ~]# crontab -e 
#ps   by ylz at 2019-4-28
10 01 * * 5   ps aux |grep  'asiainfo'  >>/progress.log    2>&1
1.1.3.17在每个月的第一天备份并压缩/etc目录下的所有内容,存放在/root/backup 目录里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。

2.书写脚本

  oot@oldboyedu59 ~]# vim /server/scripts/bak-root.sh
▽
#!bash
tar zcf /root/backup/`date +%Y%m%d`_etc  /etc/
[root@oldboyedu59 ~]# sh -x /server/scripts/bak-etct.sh
++ date +%Y%m%d
+ tar zcf /root/backup/20190428_etc /root/
tar: Removing leading `/' from member names
[root@oldboyedu59 /tmp]# tar xf /root/backup/20190428_etc
[root@oldboyedu59 /tmp]# ll
dr-xr-x--- 3 root root      236 Apr 28 16:24 etc
-rw-r--r-- 1 root root    23901 Apr 28 16:26 20190428_etc

(2)写入定时任务

[root@oldboyedu59 ~]# crontab -e 
#baketc   by ylz at 2019-4-28
00 00 01 * *   sh  /server/scripts/bak-etct.sh   >>/tmp/baketc.log   2>&1
1.1.3.18说一下crontab的配置,尽可能多的写出来

1.在/etc/crontab下设置,指定用户名的
(1)使用vim /etc/crontab 进入配置文件;在最后一行上加上
(2)

* * * * *    用户名   命令/脚本     定向到文件或黑洞

(3)重启/etc/crontab 生效
2.使用命令crontab -e ;不用指定用户名
(1)使用命令crontab -e 进入
(2)写入

* * * * *       命令/脚本     定向到文件或黑洞

(3)wq保存退出
(4)查看是否有上面脚本的执行权限;还要看脚本里面的涉及的操作文件是否有权限
(5)重启crontab,使配置生效

1.1.3.19以下字段可能和那个服务有关,表示什么意思

*/5 * * * * ping -c 100 ue.game.com > /root/network.log 2>&1

定时任务
意思:每个五分钟ping ue.game.com;不管是否连通都将结果定向到/root/network.log文件中

1.1.3.20/var/www/html/是网站的发布目录。如何每天凌晨0点30对其进行自动备份,写出操作步骤

将打包压缩文件命令:tar zcf /tmp/www.bak-date +%F.tar.gz /var/www/html/ 写入脚本/server/scripts/bak-www.sh中

[root@oldboyedu59 ~]# crontab -e 
#bakwww   by ylz at 2019-4-28
30 00 * * *   sh  /server/scripts/bak-www.sh    >>/tmp/bakwww.log   2>&1
1.1.3.21请写出一条计划任务,每天将文件倒数1000行内容在10:00整的时候追加到/tmp的list文件内

假设这个文件为oldboy.txt

[root@oldboyedu59 ~]# crontab -e 
#zhuijia   by ylz at 2019-4-28
00 10 * * *   tail -1000  oldboy.xtx >>/tmp/list         >>/tmp/tailold.log   2>&1
1.1.3.22如何稳定(固定)执行计划

1.定时任务服务是否运行:
a)当前任务是否运行

[root@oldboyedu59 ~]# systemctl is-active crond
active
[root@oldboyedu59 ~]# ps -ef |grep 'crond'
root       6816      1  0 Apr28 ?        00:00:00 /usr/sbin/crond -n
root      10518  10384  0 10:02 pts/1    00:00:00 grep --color=auto crond

b)定时任务是否开机自启动

[root@oldboyedu59 ~]# systemctl is-enabled crond
enabled

2.确保rsyslog是否运行(系统日志服务)

[root@oldedu59 ~]# systemctl is-active  rsyslog
active
[root@oldedu59 ~]# systemctl is-enabled  rsyslog
enabled

3.书写格式是否规范

1.1.3.23每天晚上12点打包备份/etc/目录到/tmp下面

(1)命令行测试

[root@oldedu59 ~]#tar zcf  /backup/etc-`date +%F_%w`.tar.gz  /etc/
tar: Removing leading `/' from member names
[root@oldedu59 ~]# ll etc-2019-04-28.tar.gz 
-rw-r--r-- 1 root root 10213180 Apr 28 09:53 etc-2019-04-28.tar.gz
[root@oldedu59 /tmp]# tar xf /backup/etc-2019-04-28.tar.gz

(2)书写脚本

[root@oldboyedu59 ~]# vim /server/scripts/+7etc.sh
#!/bin/bash
tar zcf  /backup/etc-`date +%F_%w`.tar.gz  /etc/   >/dev/null  2>&1
rm -f `find /backup/  -type f  -mtime +7  ! -name '*1_*'`   >/dev/null 2>&1

(3)测试脚本

[root@oldboyedu59 ~]# ll /backup/
total 9980
-rw-r--r-- 1 root root        0 Apr 15 22:34 etc-2019-04-15-1_tar.gz
-rw-r--r-- 1 root root 10216366 Apr 28 20:34 etc-2019-04-28_0.tar.gz
[root@oldboyedu59 ~]# tail /var/log/cron
Apr 28 20:31:01 oldboyedu59 CROND[10219]: (root) CMD (sh /server/scripts/etc-bank.sh)
Apr 28 20:32:01 oldboyedu59 CROND[10227]: (root) CMD (sh /server/scripts/etc-bank.sh)
Apr 28 20:33:01 oldboyedu59 CROND[10241]: (root) CMD (sh /server/scripts/etc-bank.sh)

(4)写入任务;改为每分钟先检查

[root@oldedu59 ~]# #写入定时任务,改为每分钟进行检查
[root@oldedu59 ~]# crontab -e
#show time  by ylz  at 20190426
#*/2 * * * *  date  >>/tmp/time.log
#beifeng   by ylz  at 2019-4-28
* * * * *  sh /server/scripts/bak-etc.sh
[root@oldedu59 ~]# tail -f  /var/log/cron(看日志  /var/log/cron)
[root@oldedu59 ~]# ll  /tmp/etc-2019-04-28.tar.gz (看结果)
-rw-r--r-- 1 root root 5341184 Apr 28 10:22 /tmp/etc-2019-04-28.tar.gz

(5)写入定时任务

[root@oldedu59 ~]# crontab -e
#show time  by ylz  at 20190426
#*/2 * * * *  date  >>/tmp/time.log   2>&1
#beifeng   by ylz  at 2019-4-28
00 00 * * *  sh /server/scripts/bak-etc.sh   >/dev/null          2>&1   
[root@oldedu59 ~]# cat /var/log/cron
[root@oldedu59 ~]# ll  /tmp/etc-2019-04-28.tar.gz 
-rw-r--r-- 1 root root 5341184 Apr 28 10:22 /tmp/etc-2019-04-28.tar.gz
1.1.3.24每天晚上12点打包备份/etc/目录到/backup 删除7天之前的备份

挑战:

1.每天晚上12点打包备份/etc/目录到/backup 删除7天之前的备份 但是要保留每周1的备份

(1)命令行测试

[root@oldboyedu59 ~]# rm -f `find /root/  -type f  -mtime +7  ! -name '*1_*'`
[root@oldboyedu59 ~]# ll
total 24
-rw-r--r-- 1 root root    0 Apr 15 22:34 etc-2019-04-15-1_tar.gz

(2)书写脚本

▽root@oldedu59 ~]# #书写脚本
[root@oldedu59 ~]# mkdir -p /server/scripts 
[root@oldedu59 ~]# cat /server/scripts/bak-etc.sh
cat: /server/scripts/bak-etc.sh: No such file or directory
[root@oldedu59 ~]# vim /server/scripts/bak-etc.sh
#!/bin/bash
tar zcf /tmp/etc-$(date +%F).tar.gz /etc/
rm -f `find /root/  -type f  -mtime +7  -name 'etc*'`

(3)测试脚本

[root@oldedu59 ~]# cat /server/scripts/bak-etc.sh
#!/bin/bash
tar zcf /tmp/etc-$(date +%F).tar.gz /etc/
[root@oldedu59 ~]# sh /server/scripts/bak-etc.sh
tar: Removing leading `/' from member names
[root@oldedu59 ~]# ll /tmp/etc-2019-04-28.tar.gz 
-rw-r--r-- 1 root root 10213180 Apr 28 09:57 /tmp/etc-2019-04-28.tar.gz

(4)写入任务;改为每分钟先检查

[root@oldedu59 ~]# #写入定时任务,改为每分钟进行检查
[root@oldboyedu59 ~]# crontab -e
* * * * *  sh /server/scripts/+7etc.sh    >>/tmp/bak.root  2>&1

(5)写入定时任务

[root@oldboyedu59 ~]# crontab -e
00 00 * * *  sh /server/scripts/+7etc.sh    >>/tmp/bak.root  2>&1

终极挑战:

1.每天晚上12点打包备份/etc/目录到/backup/ip地址命名目录 删除7天之前的备份 但是要保留每周1的备份

/backup/10.0.0.200
(1)书写脚本

▽root@oldedu59 ~]# #书写脚本
[root@oldedu59 ~]# vim /server/scripts/bak-etc.sh
#!/bin/bash
tar zcf /tmp/etc-$(date +%F).tar.gz /etc/
rm -f `find /root/  -type f  -mtime +7  ! -name '*1_*'`

(2)定时任务

[root@oldboyedu59 ~]# crontab -e
00 00 * * *  sh /server/scripts/bak-etc.sh    >>/tmp/bak.root  2>&1

你可能感兴趣的:(定时任务(面试题))