【总结别人的经验之上而成,并非完全copy。】
touch filename.sh之后,在vim中编写shell代码
vim显示行号
:set number
内容完全参考Linux Shell脚本实现根据进程名杀死进程,代码如下
#!/bin/sh
#根据进程名杀死进程
if [ $# -lt 1 ]
then
echo "缺少参数:procedure_name"
exit 1
fi
PROCESS=`ps -ef|grep $1|grep -v grep|grep -v PPID|awk '{ print $2}'`
for i in $PROCESS
do
echo "Kill the $1 process [ $i ]"
kill -9 $i
done
或者
ps -ef | grep procedure_name | grep -v grep | awk '{print $2}' | xargs kill -9
执行shell脚本,使用sh -x filename.sh,加上-x参数,会将执行的每条命令显示出来。首先确保文件具有执行权限,chmod a+x test.sh
遇到的问题
(1)Linux下执行.sh脚本错误:command not found
解决:因为变量定义时候,等号的两边使用了空格。在定义shell脚本的变量时在变量名和等号之间是不允许有空格的。
1.定时执行shell—crontab
使用crontab定时执行shell脚本。
crontab -e
每间隔20分钟,执行一次任务,然后直接写上命令*/20 * * * * /home/username/processCheck.sh
然后可以在/var/spool/cron/crontabs目录下找到与当前用户名一样名字的文件,查看文件内容,即是刚刚编写的内容。
对于crontab -e 与 直接编辑 /etc/crontab ,还是有区别的,具体没尝试,看到博文Linux配置定时,使用 crontab -e 与 直接编辑 /etc/crontab 的区别
(系统级的)做系统级配置我们会直接配置 /etc/crontab
(用户级的)一般还是建议大家使用 crontab -e ,这样系统也会帮着检查我们配置的脚本语法。
ps:另外的思路:在shell中写上do…while死循环,然后结合sleep 1200s也可以实现类似的效果
2.find 与时间结合
另外,find,还可以与mmin一起使用,比如:批量删除多长时间以前的文件,可以使用 find dirName -mmin +20 -exec rm {} \;
还有一种传统方法,进行时间比较的写法,详见shell脚本——比较当前时间与文件的创建时间间隔。代码如下[转载过来的]
#!/bin/bash
dir=`ls /root/20160705/`
DIR_PATH="/root/20160705/"
for fi in $dir
do
FILE_NAME=${DIR_PATH}${fi}
echo $FILE_NAME
a=`stat -c %Y $FILE_NAME`
b=`date +%s`
if [ $[ $b - $a ] -gt 120 ];then
echo "delete file:$FILE_NAME"
rm -rf $FILE_NAME
fi
done
echo "done"
3. pidof命令与strace命令
pidof命令用于查找指定名称的进程的进程号id号。
strace命令,可以跟踪程序的调用
其他
ls -alh查看到的时间,是文件修改时间。时间一共有:
• modification time(mtime,修改时间):当该文件的“内容数据”更改时,就会更新这个时间。内容数据指的是文件的内容,而不是文件的属性。
• status time(ctime,状态时间):当该文件的”状态(status)”改变时,就会更新这个时间,举例来说,更改了权限与属性,就会更新这个时间。
• access time(atime,存取时间)