思想
如何调试定时任务
1查看错误日志,以后只要守护进程的都要看日志
/var/log/cron 学会最小化排除
先清空,>/var/log/cron 然后测试和观察
先清空,>/var/log/cron 然后测试和观察
2增加执行任务频率调试任务
调快频率
3把定时执行时间比当前时间拖后5分钟 ,5分钟提前量,然后测试
4调整系统时间(测试环境可以)企业最好不要
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
因为定时任务没有加&>/dev/null,定时任务执行的时候把输出给系统root发邮件。
邮件服务器postfix服务默认不开,这些给系统发的邮件就会堆在临时目录(大量小文件存在)
/var/spool/clientmqueue/ 6
/var/spool/postfix/maildrop/ 7
企业故障案例:程序通过手动可以执行,放定时任务里不执行。
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重新声明下该变量,以确保脚本正确执行。以后要将其作为一个开发基本规范写上。
所有运维都会把变量放到此文件/etc/profile,把这个文件里的变量定义
在执行的脚本中 重新定义。
问题 1)在每周6的凌晨3:15执行/home/shell/collect.pl,并将标准输出和标准错误输出到/dev/null设备,请写出crontab中的语句。
######oldboy... 这是行注释 which查命令路径/bin/perl
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
图
linux用户管理与应用实践
1用户及用户组配置文件介绍
/etc/passwd 用户所在文件
储存用户信息文件
第一列 用户名称 root
第二列 用户密码 x 占位密被转移到
第三列 用户UID 0
第四列 用户组UID 0
第五列 用户说明 root
第六列 用户家目录 /root
第七列 shell解释器 /bin/bash
解释器
[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
图
Linux是命令行管理,平时输入ls,cp,谁识别,帮我们把我们想要的输出呢?
这个工具就是bash(命令行解释器)。 * ? [abc]
用户登录:输入命令,希望哪个解释器解释(结尾列决定)
/etc/passwd:bingbing:x:1004:1006::/home/bingbing:/bin/bash
CentOS7默认解释器是bash 虚拟用用户没有解释器/sbin/nologin
/etc/passwd里的解释器
6 /bin/bash
1 /bin/sync
1 /sbin/halt
18 /sbin/nologin
1 /sbin/shutdown 这几种解释器
系统解释器就一种
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
bash是sh的扩展,sh是bash的软连接。
/etc/shadow 密码所在文件
例 tail -1 /etc/shadow shadow每列的意义
bingbing 用户
:!! 密码
:17980 最近更改密码的时间
:0 禁止修改密码的天数
:99999 用户必须更改口令的天数
:7 警告更改密码的期限
: 在用户密码过期之后到禁用账户的天数
: 从1970年1月1日起,到用户被禁用的天数
: 保留
passwd oldboy改密码实际上就是修改密码所在文件
useradd oldboy 添加用户实际上就是修改上述两个文件
useradd gongli1 -c "beautify woman" -d /tmp -e '2020/10/20' 建个说明beautify woman 指定/tmp目录下 截止日期10.20止
useradd gongli2 -g oldboy 建个用户组是oldboy组
useradd bingbing -u 888 -s /sbin/nologin -M 建UID为888解释器为nologin,不建家目录
/etc/default/useradd文件 useradd命令的配置文件
默认shell就是/bin/bash
为什么默认的家目录在home下
为什么默认的家目录/home/用户名下面有很多隐藏文件,从哪来的。
就是/etc/default/useradd文件配置的。
useradd -D -s /bin/sh 相当于vim编辑/etc/default/useradd文件。
SHELL=/bin/sh
/etc/skel目录,创建用户默认就会把此目录下的文件拷贝到/home/用户名下。
/etc/skel 为每个用户提供用户环境变量的目录。
[root@oldboyedu ~]# ls /etc/skel -A
.bash_logout .bash_profile .bashrc
=================================
.bash_logout .bash_profile .bashrc 用户环境变量
登录系统后,命令行出现如下提示:为什么?
[root@oldboyedu /home/chenglong1]# su - chenglong1
-sh-4.2$
-sh-4.2$
解答:用户的环境变量缺失导致的。
如何恢复 cp /etc/skel/.bash* .
-sh-4.2$ source ./.bash_profile ./.bashrc 执行环境变量生效
ls -a查看
-sh-4.2$ export PS1='[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\]\[\e[31;1m\] \w\[\e[0m\]]\$'
[chenglong1@oldboyedu ~]$
添加用户要用的文件
/etc/login.defs 了解 登录的定义文件
添加用户要用的文件
/etc/login.defs /etc/skel /etc/default/useradd
编辑/etc/passwd,通过注释来删除。
#chenglong1:x:1007:1009::/home/chenglong1:/bin/sh
usermod 修改用户属性
usermod -g jj gg 修改权限usermod -g jj gg jj是用户组gg是用户
echo 123456|passwd --stdin oldgirl
-u 指定uid多少
-s 指定登录的SHELL解释器
-M不创建家目录
-c 添加用户说明
-d 指定家目录
-g 指定所属的组
-e 设定登录截止日期
passwd 给用户修改密码 单个直接改当前改密码
--stdin从标准输入接收密码
echo 123456|passwd --stdin oldboy
设置密码
不交互设置密码:
方法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.
[root@oldboyedu ~]# tail -4 /etc/passwd|awk -F ":" '{print $1":oldboy"}' >user.log
[root@oldboyedu ~]# cat user.log
gongli1:oldboy
gongli2:oldboy
chenglong1:oldboy
zongsheng:oldboy
chpasswd对密码文件的要求是上述user.log
chpasswd批量更新用户的密码命令
tail -4 /etc/passwd|awk -F ":" '{print $1":oldboy"}' >user.log把最后4个用户密码给改了,在把它打user.log
用户相关文件:
用户组信息文件/etc/group
图
用户组密码文件/etc/gshadow(废弃)
useradd oldboy 添加用户实际上也会修改上述两个文件(因为要创建同名的用户组)
groupadd sa 添加用户组就是修改上述两个文件
md5sum 给文件设置指纹(计算和检查MD5数字信息) md5sum 可查是否改动过
例子 md5sum /etc/passwd /etc/shadow /etc/group /etc/gshadow
开个新的useradd bingbing
回来文件发生变化md5sum /etc/passwd /etc/shadow /etc/group /etc/gshadow
grep bingbing /etc/passwd /etc/shadow /etc/group /etc/gshadow 每个里面各加一行 bingbing
2用户及用户组命令介绍
有关用户管理常见命令
useradd 添加用户 用户组
/etc/default/useradd 它的命令配置文件
[root@oldboyedu ~]# useradd gongli1 -c "beautify woman" -d /tmp -e '2020/10/20'
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
[root@oldboyedu ~]# tail -1 /etc/passwd
gongli1:x:1005:1008:beautify woman:/tmp:/bin/bash
[root@oldboyedu ~]# chage -l gongli1
Last password change : Mar 25, 2019
Password expires : never
Password inactive : never
Account expires : Oct 20, 2020 =================
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
给开发等人员添加用户,尽量给截止时间。
修改方法:useradd -D -s /bin/sh useradd -D=vim编辑文件
usermod 修改用户
userdel 删除用户
passwd 设置修改密码
chage 修改密码属性
id 查看用户的GID UID及所属的用户组信息
su 切换用户
sudo 普通用户提权的工具
visudo 用于编辑suders配置文件的工具
有关用户组管理常见命令
groupadd 添加用户组
groupdel 删除用户组
groupmod 修改用户组信息
gpasswd 为用户组设置密码
groups 显示用户所属的用户组
newgrp 更改用户所属的有效用户组
3添加用户命令useradd
useradd命令的工作原理
useradd命令的工作原理
和创建用户相关的文件/etc/login.defs
和创建用户相关的文件/etc/default/useradd
和创建用户相关的文件/etc/skel
有关创建用户的工作原理
useradd命令的常用参数
4用户信息修改相关命令usermod
5删除用户相关命令userdel
6添加用户组命令groupadd
7删除用户组命令groupdel
8修改用户密码命令passwd
9批量更新用户的密码命令chpasswd
10修改用户密码有效期命令chage
11用户查询相关命令
12用户身份切换相关命令su
13visudo:编辑sudoers文件工具
14以另一个用户身份执行命令:sudo