免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4796 | 回复: 6
打印 上一主题 下一主题

救助: 自己写的shell脚本无法重新启动httpd服务 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-03 15:18 |只看该作者 |倒序浏览
有如下一段脚本,用手工调用的时候,工作正常。但设置到 crond 下运行的时候。apache无法重新启动了。不知道大家有没有出现过同样的情况?
  1. #!/bin/bash

  2. # split apache log


  3. # flush MySQL bin.
  4. echo "Flush MySQL bin..."
  5. mysqladmin -ulocal flush-logs


  6. # stop service
  7. echo "httpd service stop..."
  8. service httpd stop
  9. PROC=$(ps -A|grep httpd|wc -l)

  10. while [ $PROC -gt 0 ];
  11. do

  12. if [ -f "/usr/local/apache/logs/httpd.pid" ];
  13. then
  14.     kill `cat /usr/local/apache/logs/httpd.pid` > /dev/null 2>&1
  15. fi

  16. PROC=$(ps -A|grep httpd|wc -l)
  17. done



  18. # move log file
  19. echo "move log file..."
  20. mv /chinasc/b2b/logs/*_log /chinasc/b2b/logs/tmp/ > /dev/null 2>&1


  21. # restart service
  22. echo "httpd service start..."
  23. service httpd start
  24. PROC=$(ps -A|grep httpd|wc -l)

  25. while [ $PROC -eq 0 ];
  26. do
  27. if [ !-f "/usr/local/apache/logs/httpd.pid" ];
  28. then
  29.     /usr/local/apache/bin/apachectl -k start
  30. fi

  31. PROC=$(ps -A|grep httpd|wc -l)
  32. done

  33. echo "awstats statistic..."
  34. /var/www/awstats/awstats.pl -update -config=b2b.csc86.com > /dev/null 2>&1
  35. /var/www/awstats/awstats.pl -update -config=www.csc86.com > /dev/null 2>&1

  36. YEAR=`date -d today +%Y-%m-%d`
  37. tar -cjvf /chinasc/b2b/logs/b2b/${YEAR}.tar.bz2 /chinasc/b2b/logs/tmp
  38. rm -f /chinasc/b2b/logs/tmp/* > /dev/null 2>&1

  39. echo "done";
复制代码

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
2 [报告]
发表于 2011-06-03 15:22 |只看该作者
cron执行脚本的时候没有环境变量,你活着用绝对路径调用命令,或者在脚本里面设置PATH环境变量

论坛徽章:
0
3 [报告]
发表于 2011-06-03 15:30 |只看该作者
cron执行脚本的时候没有环境变量,你活着用绝对路径调用命令,或者在脚本里面设置PATH环境变量
chenyx 发表于 2011-06-03 15:22



我在cron里调用的就是文件的绝对路径呀,要不然他也不会把httpd停止后,把log文件打包了
只是停止后,他无法完成对httpd的重启动作

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
4 [报告]
发表于 2011-06-03 15:33 |只看该作者
回复 3# yagas


    就像你给的代码里面的那样,service,mysqladmin....,这些命令都没写绝对路径啊

论坛徽章:
0
5 [报告]
发表于 2011-06-03 22:05 |只看该作者
2楼的已经指出你的问题了,我之前发了一个贴内容如下,应可以帮助你
同事写了一个脚本手动执行没问题,放在cron里面却没有反映,网上搜了下文章,更改以后正常,供大家分享

如题,那肯定是执行这个脚本需要用户环境变量,注意这里面的区别,在crontab里面执行的脚本并没有去执行所在用户的profile, 而你手动的执行的话,至少是执行了该用户的环境变量!
解决的办法就是在脚本开始的地方添加执行该用户的profile的命令,如下:

#!/bin/ksh
. $HOME/.profile

注意这里的"."和后面必须要有空格!



这里还有另外一种情况(在Linux下面):
#!/usr/bin/sh
......

对于这样的一个脚本,我们可能在命令行模式下直接./ 去执行它,并没有任何问题,但一旦放到crontab里面执行 就会发现报错,当然这个报错信息是很好确认问题在哪的,原因是/usr/bin/sh在Linux系统里面并不存在,
它是Solaris里面的路径,所以只需要把这个更改好就可以了,可以参考下面的文章:
http://www.cublog.cn/u1/56521/showart_2008889.html

论坛徽章:
0
6 [报告]
发表于 2011-06-05 00:50 |只看该作者
现在更郁闷了,我都用了绝对路径也不行。还是无法启动服务。

论坛徽章:
0
7 [报告]
发表于 2011-06-05 12:12 |只看该作者
建议把脚本中的/dev/null 2>&1 改成某个目录下的文件,查看执行过程中的日志文件、/var/log/cron
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP