如何调试定时任务?
1、查看错误日志
/var/log/cron
学会最小化排除
/var/log/cron
然后再测试和观察
2、增加执行任务的频率
把频率调快
3、把定时任务执行时间比当前时间拖后5分钟
4、调整系统时间
5、通过脚本日志输出调试定时任务
定时任务输出
-
-
-
-
- /bin/sh /server/scripts/bak.sh &> /tmp/bak.log
-
-
-
脚本输出
tar -zcvf oldboy.txt ./data > /tmp/tar.log
注意点:有时候程序只能执行一次。一定要在测试环境测试好,然后直接复制到正式。
代码发布流程:
办公室测试环境==>IDC机房测试环境==>IDC机房正式环境
防止在正式环境发生错误,从而影响用户体验,业务稳定
No space left on device 常见企业故障案例
磁盘满的报错,原因往往是inode被占满了
定时任务没有配置&>/dev/null,定时任务执行的时候把输出给系统root发送邮件。
邮件服务器postfix默认不打开,这些给系统发的邮件就会堆在临时目录(大量小文件存在)
/var/spool/clientmqueue / 5
/var/spool/postfix/maildrop /6;7
定时任务手动可以执行,定时任务里不执行。
定时任务在执行脚本的时候,多数情况没有办法加载环境变量,特别是/etc/profile
登陆后怎么操作都对,但是就是放到定时任务不行
命令行bash登录方式
1.手工登录后,加载所有环境变量(/.bash_profile,/bash_rc,/etc/profile,/etc/bashrc)
2.定时任务执行脚本属于非登录状态。
把变量放到此文件/etc/profile 把这个文件里的变量定义
具体为crond执行shell时只能识别为数不多的系统环境变量,普通环境变量一般是无法识别的,如果在编写的脚本中需要使用变量,最好使用export重新声明下该变量,以确保脚本正确执行。以后要讲其作为一个开发基本规范写上。
用户管理:
/etc/passwd用户所在文件
/etc/shadow密码所在文件
useradd 添加用户实际上就是修改上述两个文件
passwd 改密码实际上就是修改密码所在文件
用户组相关文件
/etc/group用户组所在文件
/etc/gshadow 用户组密码所在文件(废弃)
useradd 添加用户实际上也要修改上述两个文件(因为要创建同名的用户组)
groupadd 添加用户组就是修改上述两个文件
md5sum
[root@oldboy_template-2 scripts]# md5sum /etc/passwd /etc/shadow /etc/group /etc/gshadow
c5f043521bd4e2f20085c85a7d25d4dd /etc/passwd
4e97b090fb1f63a9d299665e4f145ea6 /etc/shadow
eed35bf97e0eeb9aa8e370616ac7f6eb /etc/group
0f253d839b3b3fbf624a01a7f9407999 /etc/gshadow
[root@oldboy_template-2 scripts]# useradd test123
[root@oldboy_template-2 scripts]# md5sum /etc/passwd /etc/shadow /etc/group /etc/gshadow
ab17c25e66f860a2f30fd640411181c0 /etc/passwd
9fe8807638c0874cd3aa6caa57e65f5d /etc/shadow
23ea30dac79ccce6b27bf4c050dfaed1 /etc/group
2567da4a4b339ce1b68d6546967009ff /etc/gshadow
第一列:用户名称
第二列:用户密码
第三列:用户ID
第四列:用户组ID
第五列:用户说明
第六列:用户家目录
第七列:shell解释器
linux是命令行管理。平时输出ls,cp,谁识别,帮我们把我们想要的输出呢?
这个工具就是bash(命令行解释器)
[root@oldboy_template-2 scripts]# awk -F ":" '{print$NF}' /etc/passwd | sort | uniq -c
6 /bin/bash
1 /bin/sync
1 /sbin/halt
21 /sbin/nologin
1 /sbin/shutdown
[root@oldboy_template-2 scripts]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash