如何调试定时任务?
1、查看错误日志
/var/log/cron
学会最小化排除:
先清空,>/var/log/cron
然后在测试和观察
2、增加执行任务频率调试任务
把频率调快。
3、把执行定时任务时间比当前时间拖后5分钟
03:00执行,当前05:00 就把时间调整05:05,有个5分钟提前量
4、调整系统时间(测试环境还凑合)
5、通过脚本日志输出调试定时任务
定时任务输出
* * * * * /bin/sh /server/scripts/bak.sh &>/tmp/bak.sh
脚本输出:
Tar zcvf oldboy.tar.gz ./data >/tmp/tar.log
注意:有时候程序只能执行一次。凡是只能执行一次的程序一定要在测试环境测试好,然后直接复制到正式。
代码发布流程:
办公室测试环境èIDC机房测试环境èIDC机房正式环境
防止在正式环境发生错误,从而影响用户体验,业务稳定。
No space left on device 常见企业故障案例
1、磁盘满的报错,原因往往是inode被占满了
因为定时任务没有加&>/dev/null,定时任务执行的时候把输出给系统root发邮件
邮件服务器postfix默认不开,这些给系统发的邮件就会堆在临时目录(大量小文件存在)
/var/spool/clientmqueue/ 6
/var/spool/posfix/mildrop/ 7
程序通过手动可以执行,放定时任务里不执行
2、Export变量生产案例
定时任务在执行脚本的时候,多数情况没办法加载变量,特别是/etc/profile
登录后怎么操作都对,但是就是放在定时任务不行。
命令行:bash登录方式
(1)、手工登录后,加载所有环境变量 (~/.bash_profile,~/.bash_rc,/etc/provfile,/etc/bashrc)
(2)、定时任务执行脚本输出非登录状态(/etc/bashrc)
实践检验。定时任务能否加载/etc/bashrc和/etc/profile文件
所有运维都会把变量放到此文件/etc/profile,把这个文件里的变量定义
在执行的脚本中 重新定义
具体为crond执行shell时只能识别为数不多的系统环境变量,普通环境变量一般是无法识别的,如果在编写的脚本中需要使用变量,最好使用export重新声明下该变量,以确保脚本正确执行。以后要将其为一个开发基本规范写上。

Linux用户管理知识与应用实践
1、用户相关文件:
/etc/passwd 用户所在文件
/etc/shadow 密码所在文件
Useradd oldboy 添用户实际上就是修改上述两个文件
/passwd oldboy 改密码实际上就是修改密码所在文件
2、用户组相关文件
/etc/group 用户组所在文件
/etc/gshadow 用户组密码所在文件(废弃状态)
Useradd oldboy 添加用户 实际上也会修改上述两个文件(因为要创建同名的用户组)
Groupadd sa 添加用户组就是修改上述两个文件
md5sum 给文件设置指纹(计算和检查MD5数字信息)
/etc/passwd
第一列root是用户名称
第二列 :x是 : 用户密码
第三列:0 是 :用户UID
第四列:0是: 用户组GID
第五列:root是:用户说明
第六列:/root是:用户家目录
第七列:/bin/bash是:shell解释器
/etc/shadow
1、用户名称
2、用户密码:加密过的字符串
3、最近更改密码的时间:从1970年1月1日开始,到最近一次更改口令的天数
4、禁止修改密码的天数:这里记录了这个账号的密码需要经过几天才可以被变更
5、用户必须更改口令的天数:必须要在这个时间之内重新设定你的密码,否则这个账号江湖暂时失效
6、警告更改密码的权限:在用户密码过期前多少天提醒用户更改密码
7、不活动时间:在用户密码过期之后到禁用账户的天数
8、失效时间:从1970年1月1日期,到用户被禁用的天数
9、标志:保留
/etc/group
1、用户组名:用户组的名称
2、用户组密码:通常不需要设该密码
3、GID:用户组的ID
4、用户成员:加入这个组的所有用户
/etc/gshaow
1、用户组名:用户组的名称
2、用户组密码:这个段可以使空的或!,如果是这样的,表示没有密码
3、用户组管理员用户:这段也可以为空,如果有多个,用哪个“,”分隔
4、用户成员:加入这个组的所有用户,如果有多个,用哪个“,”分隔
/etc/default/useradd文件(useradd命令的配置文件)
默认shell就是/bin/sh
默认的家目录在home下
默认的家目/home/用户名下面有很多隐藏文件
就是/etc/default/useradd配置的
