本人在写脚本重启动过程遇到坑,分享给大家,避免大家误入同样的坑。
需求:编写Squid重启动脚本。每天夜间12定时重启动
- 重启脚本思路: 1、停止服务进程,kill 可以搞定 2、启动进程,知道服务如何启动即可
问题现象(坑):执行任务并不能重启动。kill 进程后,直接停止了。不执行后续启动服务命令
- 脚本:
[root@test scripts]# more squid.sh #!/bin/bash source /etc/profilekill -9 $(ps -ef |grep "squid" |grep -v "grep" |awk '{print $2}')ps aux |grep squidsleep 1/usr/sbin/squid -f /etc/squid/squid.confps aux |grep squid
进程图
![3c45f72e9e283195285bcbb8b81bc4a1.png](https://img-blog.csdnimg.cn/img_convert/3c45f72e9e283195285bcbb8b81bc4a1.png)
- 执行脚本,重启动提示killd错误
[root@test scripts]# sh -x squid.sh + source /etc/profile++ '[' -x /usr/bin/id ']'++ '[' -z 0 ']'+++ /usr/bin/id -un++ USER=root++ LOGNAME=root++ MAIL=/var/spool/mail/root++ '[' 0 = 0 ']'++ pathmunge /usr/sbin......+++ alias 'which=alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'++ unset i++ unset -f pathmunge+++ whoami++ export 'HISTTIMEFORMAT=%F %T root '++ HISTTIMEFORMAT='%F %T root '+ stop++ ps -ef++ grep --color=auto squid++ grep --color=auto -v grep++ awk '{print $2}'+ kill -9 15556 15561 15565 16376 16397Killed
问题原因
由于执行squid.sh 脚本时,直接将当前shell脚本一起kill 掉了。造成后续启动服务命令没有执行。
![7e2a593cca3329762b02079bba9ff538.png](https://img-blog.csdnimg.cn/img_convert/7e2a593cca3329762b02079bba9ff538.png)
解决方法
- 方法一:更换脚本名称,将squid.sh 修改为test.sh 。程序运行正常(能够正常启动) 主要是因为上面脚本,查找关键字"squid"时,直接将脚本自身也kill掉了。
![8fd1438645508ab93de09e28bea00b1e.png](https://img-blog.csdnimg.cn/img_convert/8fd1438645508ab93de09e28bea00b1e.png)
- 方法二: 修改脚本
#!/bin/bash source /etc/profilekill -9 $(ps -ef |grep "/usr/sbin/squid -f /etc/squid/squid.conf" |grep -v "grep" |awk '{print $2}')kill -9 $(ps -ef |grep "/var/log/squid/access.log" |grep -v "grep" |awk '{print $2}')ps aux |grep squidsleep 1/usr/sbin/squid -f /etc/squid/squid.confecho "squid is restart $(date)" >> /data/logs/squid.log
![e6e47cd460a0d83f044bb14a18044b6f.png](https://img-blog.csdnimg.cn/img_convert/e6e47cd460a0d83f044bb14a18044b6f.png)
总结
- 进程重启动, 定位服务时,一定要精确定位。不要使用模糊匹配。匹配不好就入坑。