编写shell程序,完成以下功能
1.每隔一个小时(测试可以把时间间隔设置为1分钟)把当前系统正在运行的全部进程信息写入一个日志文件
提示:可以用crontab配置定时任务,用ps命令生成进程信息
2.每天生成一个新日志文件,日志文件名以ps-yyyy-MM-dd.log命名,其中yyyy用四位年份值代替,MM用两位月份值代替,dd用两位日期值代替。文件的权限为600。
3.如果文件不存在,则按照命名规则创建新文件,如果日志文件已存在,则把新日志追加方式写入文件
4.日志文件以月份进行分类,例如2022年3月份所有的日志文件存入’202203’的目录下,所有目录存入ps-log目录下
5.目录不存在则按照命名规则创建目录
6.自动删除1年前的的日志信息(目录和文件都删除)
在编程之前我们需要先了解一下shell
1、 什么是shell
Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。
shell充当一个桥梁:
a.将使用者的命令翻译给核心(kernel)处理。
b. 同时,将核心的处理结果翻译给使用者。
2、 shell的特性
(1) 运行程序
shell类似于一个程序启动器,shell将程序载入内存并运行它们。
(2) 管理输入和输出
使用<、>和|符号可以将输入输出重定向。这样就可以告诉shell将进程的输入和输出连接到一个文件或是其他进程。
(3) 可编程
3、 shell如何运行程序
shell用fork建立新进程,用execv函数簇在新进程中运行用户指定的程序,最后shell用wait命令等待新进程结束。wait系统调用同时从内核取得退出状态或者信号序号以告知子进程是如何结束的。
开始编写
1、 终端连接服务器
ssh root@8.129.58.123
2、 切换目录到/home ,查看已有文件,然后创建shell程序
cd /home
ls
vim ps.sh
3、 编写shell程序
Esc退出输入模式进入命令模式
Shift+英文:(冒号键)进入底线命令模式
输入wq,保存并退出,即可完成第一个shell文件的编写。
4、 查看文件是否创建成功,并赋予运行权限
Ls
chmod 744 ps.sh
可见ps.sh文件已经可以运行
5、 创建定时任务
crontab -e
按i进入输入模式,输入以下命令
0 */1 * * * /home/ps.sh >> /var/log/ps-log/rewrite.log 2>&1
按之前的创建ps.sh文件一样的方法wq保存并退出
查看定时任务是否设置成功
crontab -l
6、切换目录到/var/log/ps-log,查看文件是否已经自动生成
7、 大功告成
shell完整代码:
#!/bin/bash
#author ShaneTang
#Automatic process information storage
date=`date +%Y%m`
nowdate=`date +%Y-%m-%d`".log"
DATA_PATH=/var/log/ps-log
#创建文件夹
if [ ! -d $DATA_PATH/${date} ]; then
mkdir $DATA_PATH/${date}
fi
#创建文件
if [ ! -f $DATA_PATH/"$date"/"$nowdate" ]; then
touch $DATA_PATH/"$date"/$nowdate
chmod 600 $DATA_PATH/"$date"/$nowdate
fi
#将进程消息写入文件
echo `ps -A` >> $DATA_PATH/"$date"/${nowdate}
#记录重写
echo $(date "+%Y-%m-%d %H:%M:%S")"重写日志"
#删除一年以前的旧文件
find $DATA_PATH -mtime +365 -name "*" -exec rm -rf {} \;
对于变量的使用我还不太熟练,如果你发现我的问题欢迎私聊我一起学习😂😂😂