day 18
定时任务要领
* * * * * /bin/sh (索要执行的任务主题) &>/dev/null (或 >/dev/null 2>&1)
如何调试定时任务
1、查看错误日志
/var/log/cron
学会最小化排除
先清空, >/var/log/cron
然后再测试和观察。
2、增加执行任务频率调试任务
把频率调快
3、把定时任务执行时间比当前时间拖后5分钟
00 03执行,当前5:00,咱们就把时间调整提前5分钟
4、调整系统时间(测试环境还凑合)
00 03 执行,把系统时间调整到2:55
5、通过脚本日志输出调试定时任务
定时任务输出
* * * * * /bin/sh /server/scripts/bak.sh &>/tmp/bak.log
脚本输出
tar zcvf oldboy.tar.gz ./date >/tmp/tar.log
(注意点:有的程序只能执行一次,一定要在测试环境测试好,然后直接复制到测试)
代码发布流程:
办公室测试环境==>IDC机房测试环境===>IDC机房正式环境
防止在正式环境发生错误,从而影响用户体验,业务稳定
No space left on device 常见的企业故障案列
磁盘满的报错,原因往往是 inode被占满了
因为定时任务没有加&>./dev/null,定时任务执行的时候把输出给系统root发邮件。
邮件服务器postfix服务默认不开,这些给系统发的邮件
/var/spool/clientmqueue/ centos6
/var/spool/postfix/maildrop/ centos7
企业故障案例:程序通过手动可以执行,放定时任务里不执行。
crontab文件中没有配置环境变量引起的
系统自动执行任务调度时,除了默认的环境,是不会加载任何其他环境变量的。
因此就需要在crontab文件中指定任务运行所需的所有环境变量。
定时任务在执行脚本的时候,多数情况没办法加载环境变量,特别是/etc/profile。
登录后怎么操作都对,但是就是放到定时任务不行。
命令行:bash登录方式
1.手工登录后,加载所有环境变量(~/.bash_profile,~/.bash_rc,/etc/profile,/etc/bashrc)
2.定时任务执行脚本属于非登录状态 (/etc/bashrc)。
实践检验,定时任务能否自动加载/etc/bashrc和/etc/profile文件。
所有运维都会把变量放到此文件/etc/profile,把这个文件里的变量定义
在执行的脚本中重新定义。
具体为crond执行Shell时只能识别为数不多的系统环境变量,普通环境变量一般是无法识别的,如果在编写的脚本中需要使用变量,最好使用export重新声明下该变量,以确保脚本正确执行。以后要将其作为一个开发基本规范写上。
第十四章 Linux用户管理知识与应用实践
1.1、用户及用户组配置文件
用户相关文件:
/etc/passwd 用户所在文件
/etc/shadow 密码所在文件
useradd oldboy 添加用户实际上就是修改上述两个文件
passwd oldboy 改密码实际上就是修改密码
用户组相关文件
/etc/group 用户组所在文件
/etc/gshaow 用户组密码所在文件(废弃状态)
useradd oldboy 添加用户实际上就是修改上述两个文件(因为要创建同名用户组)
groupadd sa 添加用户组就是修改上述两个文件
md5sum 给文件设置指纹(计算和检查MD5数字信息)
Linux是命令行管理,平时输入ls,cp,谁识别,帮我们把我们想要的输出呢?
这个工具就是bash(命令行解释器)。 * ? [abc]
用户登录:输入命令,希望哪个解释器解释(结尾列决定)
/etc/passwd:bingbing:x:1004:1006::/home/bingbing:/bin/bash
CentOS7默认解释器是bash。
/etc/passwd里的解释器
[root@oldboyedu ~]# awk -F ":" '{print $NF}' /etc/passwd|sort|uniq -c
6 /bin/bash
1/bin/sync
1/sbin/halt
18/sbin/nologin
1/sbin/shutdown
[root@oldboyedu ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
bash是sh的扩展,sh是bash的软连接。
passwd中对各字段的详细说明
给开发人员添加用户,尽量给截止时间
[root@oldboyedu ~]# useradd gongli2 -g incahome
[root@oldboyedu ~]# id gongli2
uid=1006(gongli2) gid=1004(incahome) groups=1004(incahome)
/etc/default/useradd文件 useradd命令的配置文件
默认shell就是/bin/bash
为什么默认的家目录在home下
为什么默认的家目录/home用户名在面有很多隐藏文件,从哪来的
修改方法:
useradd -D -s /bin/sh 相当于vim编辑/etc/default/useradd文件。
[root@oldboyedu ~]# useradd -D -s /bin/sh
You have new mailin/var/spool/mail/root
[root@oldboyedu ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
/etc/skel目录,创建用户就会把此目录下的文件拷贝到/home/目录名下
/etc/skel 为每个用户提供用户环境变量的目录。
[root@oldboyedu ~]# ls /etc/skel -A.bash_logout .bash_profile .bashrc===================================================.bash_logout .bash_profile .bashrc 用户环境变量
/etc/login.defs 添加用户要用的文件(登录的定义文件)【了解】
删除用户相关命令 userdel
语法: userdel [选项] [用户名]
参数: -f:强制删除
-r:递归删除用户目录及下面内容,删除前备份或确认目录下无重要内容
不交互设置密码:
方法1:
[root@oldboyedu ~]# echo 123456|passwd --stdin oldgirl
Changing password for user oldgirl.
passwd: all authentication tokens updated successfully.
方法2:
[root@oldboyedu ~]# echo 123456 >pass
[root@oldboyedu ~]# cat pass
123456
[root@oldboyedu ~]# passwd --stdin oldgirl <pass
Changing password for user oldgirl.
passwd: all authentication tokens updated successfully