课程回顾与补充
如何调试定时任务?
1、查看错误日志
/var/log/cron
有思路且学会最小化查找出错误
先清空>/var/log/cron更直观查看错误日志
2、增加执行任务频率调试任务
把频率调快。例如每分钟执行
3、把定时任务执行时间比当前时间拖后2分钟(最低)
当前5:00,咱们就把时间调整 02 05有个最低2分钟提前时间。
4、调整系统时间(测试环境还凑合)不推荐
00 03执行,把系统时间调整到2:58。
5、通过脚本日志输出调试定时任务
定时任务单独输出到指定文件 取消指定到空 查看输出结果
* * * * * /bin/sh /server/scripts/bak.sh &>/tmp/bak.log
脚本输出:
tar zcvf oldboy.tar.gz ./data &>/tmp/tar.log
注意点:
有时候程序只能执行一次。一定要在测试环境测试好,然后直接复制到正式。
代码发布流程:
办公室测试环境===>IDC机房测试环境===>IDC机房正式环境
防止在正式环境发生错误,从而影响用户体验,业务稳定。
企业故障案例:No space left on device常见企业故障案例
磁盘满的报错,原因往往是inode被占满了。
df -i 查看inode占用情况
因为定时任务没有加&>/dev/null,定时任务执行的时候把输出给系统root发邮件。
邮件服务器postfix服务默认不开,这些给系统发的邮件就会堆在临时目录(大量小文件存在)
/var/spool/clientmqueue/
/var/spool/postfix/maildrop/
企业故障案例:程序通过手动可以执行,放定时任务里不执行。
export变量生产案例
定时任务在执行脚本的时候,多数情况没办法加载环境变量,特别是/etc/profile。
登录后怎么操作都对,但是就是放到定时任务不行。
命令行:bash登录方式
1.手工登录后,加载所有环境变量(~/.bash_profile,~/.bash_rc,/etc/profile,/etc/bashrc)
2.定时任务执行脚本属于非登录状态(/etc/bashrc)。
实践检验,定时任务能否自动加载/etc/bashrc和/etc/profile文件。
所有运维都会把变量放到此文件/etc/profile,把这个文件里的变量定义
在执行的脚本中 重新定义。
具体为crond执行Shell时只能识别为数不多的系统环境变量,普通环境变量一般是无法识别的,如果在编写的脚本中需要使用变量,最好使用export重新声明下该变量,以确保脚本正确执行。以后要将其作为一个开发基本规范写上。
1)在每周6的凌晨3:15执行/home/shell/collect.pl,并将标准输出和标准错误输出到/dev/null设备,请写出crontab中的语句。
######oldboy...
15 03 * * 6 /bin/perl /home/shell/collect.pl >/dev/null 2>&1
2)crontab在11月份内,每天的早上6点到12点中,每隔2小时执行一次/usr/bin/httpd.sh,
怎么实现 ?
00 6-12/2 * 11 * /bin/sh /usr/bin/httpd.sh &>/dev/null
02. 用户管理相关知识
系统中用户分类
a 超级管理员用户 root uid=0
b 系统虚拟用户 nobody uid=1-999 centos7 不需要有家目录/不需要登陆系统
uid=1-499 centos6
c 系统普通用户 uid=1000+ centos7
uid=500+ centos6
用户和组的关系
一个用户属于一个组 1对1关系
一个用户属于多个组 1对多关系
多个用户属于多个组 多对多关系
多个用户属于一个组 多对1关系
03. 用户管理中重要文件信息(一定要保存好)
用户相关的文件:(重点关注)
/etc/passwd --- 用户信息记录文件
oldboy01:x:1003:1003:sa-xiaozhang:/home/oldboy01:/bin/bash
01 02 03 04 05 06 07
第一列: 用户名称信息
第二列: 表示用户密码信息. 真正密码信息已经保存在了/etc/shadow文件中
第三列: 表示用户uid数值信息
第四列: 表示用户gid数值信息
第五列: 表示用户注释信息
第六列: 定义用户所在家目录信息
第七列: 用户是否能够登陆系统 shell信息(/etc/shells)
shell信息哪些设置可以进行远程登陆
/bin/bash
shell信息哪些设置不可以进行远程登陆
/sbin/nologin
/usr/sbin/nologin
/etc/shadow --- 用户密码信息记录文件
用户组相关的文件:
/etc/group --- 确认组是否存在,可以查看group文件
/etc/gshadow
04. 用户管理中重要目录信息
企业异常案例:
当家目录信息被清空之后, 命令提示符会发生变化
-bash-4.2$
解决方式:
将/etc/skel目录中的数据信息复制到相应用户家目录中
cp -a /etc/skel/.bash* ~/
05. 用户管理相关命令
第一个重要的命令: useradd 用于创建用户
相关参数总结:
-u 指定新建用户的uid数值
-G 指定用户还属于哪个组 指定用户附属组信息
-g 指定用户属于主要组信息
-s 指定新建用户shell信息, 如果指定为/sbin/nologin,用户无法登陆系统
-M 创建新用户时,不要给家目录
-c 创建的新用户添加注释信息
检查用户是否存在
id oldboy051
uid=1024(oldboy051) gid=1024(oldboy051) groups=1024(oldboy051)
用户的uid信息 用户的组id,所属组 用户所属的其他组信息
所属主要组
如何设置uid值 666
如何设置所属组 666 同时还属于1024这个组
useradd -u 666 oldboy30 -G oldboy051
[[email protected] ~]# id oldboy30
uid=666(oldboy30) gid=1025(oldboy30) groups=1025(oldboy30),1024(oldboy051)
创建一个用户alex999指定uid为888,禁止用户登录系统,不创建家目录
useradd alex999 -u 888 -s /sbin/nologin -M --- 创建虚拟用户方法
虚拟用户主要用于管理服务进程
第二个重要的命令: userdel 删除用户信息
userdel xiadao --- 直接利用命令删除用户,会有用户的残留信息(家目录还有 用户邮件还有)
userdel -r 用户 --- 彻底删除用户信息
彻底删除用户的方法:
userdel -r xiadao01
userdel -r xiadao01
userdel: user 'xiadao01' does not exist
ll -d /home/xiadao01
ls: cannot access /home/xiadao01: No such file or directory
ll /var/mail/xiadao01
ls: cannot access /var/mail/xiadao01: No such file or directory
useradd xiadao01
如果删除用户时,有残留信息没有删除掉如何解决:
1) 手动删除残留数据
2) 创建出一个相同的用户,再次删除
第一个历程: 创建用户
useradd -u uid值 相同用户名 --- uid值和家目录属主信息保持一致
第二个历程: 彻底删除用户
userdel -r 用户名
第三个重要的命令: usermod 修改用户信息
-u 指定新建用户的uid数值
-G 指定用户还属于哪个组 指定用户附属组信息
-g 指定用户属于主要组信息
-s 指定新建用户shell信息, 如果指定为/sbin/nologin,用户无法登陆系统
-c 创建的新用户添加注释信息