延迟任务
at 延迟任务的执行命令;延迟任务执行后,它不会给shell界面发送信息,信息会以邮件的方式发送;
邮件所在的路径/var/spool/mail/root; 输入邮件编号查看邮件,q退出邮件;
在进行实验前清空邮件,方便查看延迟任务的邮件;
> /var/spool/mail/root ###清空日志
1.设置延迟任务
at now+1min ####延迟任务推迟一分钟执行;延迟时间为整分钟;
at -l ###查看延迟任务列表
at -c 3 ###显示延迟编号为3的任务详情
atrm 4 ####删除标号为4的延迟任务
2.延迟任务黑名单(黑名单不针对超级用户)
黑名单配置文件/etc/at.deny
将student用户加入黑名单;将不能执行at命令;
3.延迟任务白名单
白名单默认不存在,当白名单建立之后,系统默认将所有用户加入黑名单
计划任务
1.在linux系统则是由cron系统服务来控制 ,使用的计划任务命令是crontab命令;
2.cron服务是linux系统用来周期执行某个任务或者等待处理某些事的一个守护进程;
任务调度分为两类,系统任务调度和用户任务调度;
系统任务调度:系统周期性所要执行的工作,比如写入缓存数据到硬盘,日志的清理。在/etc/目录下有个crontab文件,这个就是系统任务调度的配置文件;
[root@server130 ~]# more /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- 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
# | | | | |
# * * * * * user-name command to be executed
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
前四行用来配置crond任务运行的环境变量;第一行是指定系统要使用的那个shell;第二行PATH变量指定系统执行命令的路径;第三行MAILTO变量指定crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户;第四行的HOME变量指定了在执行命令或者脚本时使用的主目录;
用户任务调度:用户在定期执行的任务,比如用户数据备份,定时邮件提醒等。用户可以使用crontab工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在/var/spool/cron目录中。其文件和用户名一致。
[root@server130 ~]# more /etc/ ##系统的定时任务
cron.d/ ###用户自定义任务模式
cron.daily/ ###每天执行的任务
cron.deny ###该文件内的用户禁止使用crontab命令,黑名单
cron.hourly/ ###每小时执行的任务
cron.monthly/ ###每月执行的任务
crontab
cron.weekly/ ##每周执行的任务
crypttab
二.cron服务
1.安装crontab服务:
[root@server130 ~]# yum install -y crontabs
[root@server130 ~]# systemctl start crond 启动服务
[root@server130 ~]# systemctl enable crond 设置开机自启
[root@server130 ~]# systemctl stop crond 停止服务
[root@server130 ~]# systemctl restart crond 重启服务
[root@server130 ~]# systemctl status crond 查看服务的状态
2.crontab 用法
crontab 命令格式:
crontab [ -u user ] file
crontab [ -u user ] [ -e | -l | -r ]
参数:
crontab -u user 设定某个用户的定时任务;
crond -e #直接编辑某个用户的crontab任务,指定用户编辑该用户内容;
crontab -l #显示当前用户crontab文件内容,加入用户查看指定用户的crontab文件内容;
crontab -r #删除某个用户的所有crontab任务(/var/spool/cron目录下文件)
crontab -i #在删除用户的crontab文件时给于确定提醒;
创建定时任务:
[root@server130 ~]# vi /var/spool/cron/root
0,15,30,45 18-06 * * * /bin/echo `date` > /tmp/root
#每天06-18时每隔15分钟查看一次时间输入到/tmp/root文件
##查看当前用户的定时任务
[root@server130 ~]# crontab -l
0,15,30,45 18-06 * * * /bin/echo `date` > /tmp/root
交互式编辑定时任务
echo "* * * * * root date " >>/etc/cron.d/root
定时任务的备份以及恢复:
在$HOME目录中对crontab文件做备份:
[root@server130 ~]# crontab -l > $HOME/mycron
[root@server130 ~]# more $HOME/mycron
#(put you own initals here) echo the data to the console every
# 15 minutes between 6pm to 6am
0,15,30,45 18-06 * * * /bin/echo `date` > /tmp/root
#$HOME对应相应的目录/var/spool/cron/
#编辑主文件是相应编辑配置文件
有时我们创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在crontab文件中没有配置环境变量引起的。
在 crontab文件中定义多个调度任务时,需要特别注意的一个问题就是环境变量的设置,因为我们手动执行某个任务时,是在当前shell环境下进行的,程 序当然能找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量的,因此,就需要在crontab文件中指定任务运行所需的所有环境变量,这 样,系统执行任务调度时就没有问题了。
临时文件管理
1.查找临时文件
which systemd-tmpfiles ####查询文件在哪
rpm -qf /usr/lib/tmpfiles.d/systemd-tmpfiles ####查询文件属于那个软件包
rpm -ql systemd-208-11.el7.x86_64 ###查询软件包生成文件
2.编辑临时文件生成目录
vim /usr/lib/tmpfiles.d/hello.conf
/mnt/tmp 1777 root_root 8s
###临时文件存放在/mnt/tmp目录。权限为1777,属主为root.属组为root,时间为8秒
3.建立临时文件
systemd-tmpfiles --create /usr/lib/tmpfiles.d/*
4.清理临时文件
systemd-tmpfiles --clean /usr/lib/tmpfiles.d/*
免秘钥ssh登陆其他服务器
有时我们需要从其他大量的服务器去拉取日志或者执行命令检查信息,如果手动去执行命令会非常繁琐以及任务量重;为了方便我们写成脚本去执行,省去大量的时间。ssh到其他服务器需要输入密码,此时可以为服务器配置免秘钥登陆服务器,采用了数字签名RSA或者DSA(加密方式)来完成这个操作。具体步骤配置如下:
#以下命令执行时选择默认即可
[root@server2 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:tgq3q7745bTcz2IV4bSH1+fL35nDwZB4kVgKpTaYeW4 root@server2
The key's randomart image is:
+---[RSA 2048]----+
| ...o.. |
| + =..o |
| + B =..o |
| + *.o+. .|
| SE +. oo |
| .... o.|
| . + .. o o|
| . B =o. =+|
| .o=oBo.oo o=|
+----[SHA256]-----+
[root@server2 ~]# cd /root/.ssh/
[root@server2 .ssh]# ls
id_rsa(私钥) id_rsa.pub(公钥) known_hosts
将公钥发送给其他需要ssh的服务器,命名为authorized_keys
[root@server2 .ssh]# scp id_rsa.pub root@192.168.50.138:/root/.ssh/authorized_keys
此时可以进行免秘钥登陆其他服务器:但是不能从其他服务器登陆该台服务器,只是单向免秘钥登陆系统!
[root@server2 ~]# ssh root@192.168.50.138
Last login: Fri Dec 14 17:31:23 2018 from server2
[root@server38 ~]# ssh 192.168.50.132
root@192.168.50.132's password:
双向免秘钥登陆
两台服务器都生成秘钥以及私钥,然后将公钥传送给对方,完成双向登陆设置。方法参考以上
为了安全需要将传送的文件和目录进行权限最小化设置;
[root@server38 ~]# chmod 600 /root/.ssh/authorized_keys
[root@server38 ~]# ll /root/.ssh/authorized_keys
-rw-------. 1 root root 394 Dec 14 17:30 /root/.ssh/authorized_keys
[root@server38 ~]# chmod 700 /root/.ssh -R
[root@server38 ~]# ll -d /root/.ssh
drwx------. 2 root root 48 Dec 14 17:30 /root/.ssh