免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 经纬联科
打印 上一主题 下一主题

[文本处理] centos任务计划和执行脚本【已解决】 [复制链接]

论坛徽章:
2
IT运维版块每日发帖之星
日期:2015-07-04 22:20:00操作系统版块每日发帖之星
日期:2015-07-04 22:20:00
11 [报告]
发表于 2015-11-26 16:24 |只看该作者
回复 9# seanking1987
发现任务计划执行了脚本,但是脚本里的命令没有执行,怎么回事呢?
设置任务计划半小时执行一次,按道理ss5的运行时间不应该超过30分钟,现在查看都一个小时了~~说明ss5没有重启

[root@msgin ~]# cat /etc/crontab
*/30 * * * * root /root/ss5restart.sh

[root@msgin ~]# cat /var/log/cron
Nov 26 16:00:01 msgin CROND[19280]: (root) CMD (/root/ss5restart.sh)

[root@msgin ~]# ps -eo pid,tty,user,comm,lstart,etime | grep ss5
29536 ?        Vn32     ss5             Thu Nov 26 15:21:56 2015    01:00:03
29538 ?        Vn31     ss5             Thu Nov 26 15:21:56 2015    01:00:03

[root@msgin ~]# cat ss5restart.sh
#!/bin/bash
service ss5 stop
/usr/sbin/ss5 -t -m -b  1.1.1.2  -u Vn32
/usr/sbin/ss5 -t -m -b  1.1.1.1  -u Vn31







论坛徽章:
5
金牛座
日期:2015-07-03 13:32:00卯兔
日期:2015-07-03 13:32:17程序设计版块每日发帖之星
日期:2015-11-29 06:20:0015-16赛季CBA联赛之同曦
日期:2015-12-15 09:36:06CU十四周年纪念徽章
日期:2016-07-06 17:18:48
12 [报告]
发表于 2015-11-26 16:32 |只看该作者
回复 11# 经纬联科

日志里有记录可以表明crontab已经生效。服务没有重启猜测是脚本问题。

你可以手动执行sh /root/ss5restart.sh,当然可以跟踪执行过程sh -x /root/ss5restart.sh看看是否可以正常执行。
另外设置的crontab
*/30 * * * * sh /root/ss5restart.sh >> /root/ss5restart.log 2>&1
可以输出到一个日志里面,如有问题可以查看这个日志。
   

论坛徽章:
2
IT运维版块每日发帖之星
日期:2015-07-04 22:20:00操作系统版块每日发帖之星
日期:2015-07-04 22:20:00
13 [报告]
发表于 2015-11-26 16:34 |只看该作者
回复 12# seanking1987

[root@msgin ~]# ps -eo pid,tty,user,comm,lstart,etime | grep ss5
29536 ?        Vn32     ss5             Thu Nov 26 15:21:56 2015    01:10:26
29538 ?        Vn31     ss5             Thu Nov 26 15:21:56 2015    01:10:26
[root@msgin ~]# ./ss5restart.sh
Shutting down ss5...
done                                                       [  OK  ]
[root@msgin ~]# ps -eo pid,tty,user,comm,lstart,etime | grep ss5
6727 ?        Vn32     ss5             Thu Nov 26 16:32:34 2015       00:19
6730 ?        Vn31     ss5             Thu Nov 26 16:32:34 2015       00:19


手动执行的话没有问题,如果任务计划就像是脚本里面的命令没有执行~


   

论坛徽章:
5
金牛座
日期:2015-07-03 13:32:00卯兔
日期:2015-07-03 13:32:17程序设计版块每日发帖之星
日期:2015-11-29 06:20:0015-16赛季CBA联赛之同曦
日期:2015-12-15 09:36:06CU十四周年纪念徽章
日期:2016-07-06 17:18:48
14 [报告]
发表于 2015-11-26 16:44 |只看该作者
回复 13# 经纬联科

/root/ss5restart.sh
这样子执行呢?
我觉得这个帖子已经成了我们两的专用聊天帖,这样真的好吗。。。

   

论坛徽章:
2
IT运维版块每日发帖之星
日期:2015-07-04 22:20:00操作系统版块每日发帖之星
日期:2015-07-04 22:20:00
15 [报告]
发表于 2015-11-26 16:58 |只看该作者
回复 14# seanking1987


    回复 14# seanking1987

其他人没有回复呀 多亏了你回复这问题的解决才有进展~

[root@msgin ~]# /root/ss5restart.sh
Shutting down ss5...
done                                                       [  OK  ]
[root@msgin ~]# ps -eo pid,tty,user,comm,lstart,etime | grep ss5
19315 ?        Vn32     ss5             Thu Nov 26 16:51:03 2015       00:17
19318 ?        Vn31     ss5             Thu Nov 26 16:51:03 2015       00:17

这样也是可以的~

我搜索了资料, 跟我遇到的现象很一致,说是跟PATH有关系,但是我对linux知道的很少,还是不知道怎么添加,能帮看下如果是我这个问题,怎么添加呢?

关于CentOS中crontab的定时脚本不执行Shell的问题

昨天帮客户设置一下Linux中的SVN软件,并帮忙设置一下开启启动,中间我自己写了一个Shell脚本开启启动,并5分钟检查一次看看有没有执行。

如果忽,忙开了, Shell写好,手动执行一下可以执行, 然后往 /etc/crontab 中添加
*/5 * * * root /home/shell/***.sh

然后重启crond

service crond restart

然后就去系统日志里看看crontab的日志

tailf /var/log/crond

看着日志发现确实是5分钟执行一次上面写的脚本了,但是就是没效果。

手动执行了好几次都是可以执行的脚本, 后来去百度、Google查一下,发现有这样一个问题,

如果系统的Path中没有你要执行的Shell程序的路径,那么Crontab就没办法执行这个脚本。

解决方案是在PATH中添加这些路径,例如:

SHELL=/bin/bash
#PATH=/sbin:/bin:/usr/sbin:/usr/bin
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
MAILTO=root
HOME=/

如何是要重启Apache什么的, 在PATH中添加
/usr/local/apache/bin

如果是要启动MySQL数据库,在PATH中添加
/usr/local/mysql/bin

论坛徽章:
5
金牛座
日期:2015-07-03 13:32:00卯兔
日期:2015-07-03 13:32:17程序设计版块每日发帖之星
日期:2015-11-29 06:20:0015-16赛季CBA联赛之同曦
日期:2015-12-15 09:36:06CU十四周年纪念徽章
日期:2016-07-06 17:18:48
16 [报告]
发表于 2015-11-26 17:09 |只看该作者
本帖最后由 seanking1987 于 2015-11-26 17:12 编辑

回复 15# 经纬联科

好吧,虽然我并不这样认为,因为脚本里都是绝对路径了,可以试试
脚本改成:
#!/bin/bash

#加载环境变量
. ${HOME}/.bash_profile
PATH=$PATH:/sbin

#执行动作
service ss5 stop
/usr/sbin/ss5 -t -m -b  1.1.1.2  -u Vn32
/usr/sbin/ss5 -t -m -b  1.1.1.1  -u Vn31


   

论坛徽章:
2
IT运维版块每日发帖之星
日期:2015-07-04 22:20:00操作系统版块每日发帖之星
日期:2015-07-04 22:20:00
17 [报告]
发表于 2015-11-26 17:46 |只看该作者
本帖最后由 经纬联科 于 2015-11-26 18:01 编辑

回复 16# seanking1987


    哇~貌似这样真的可以了~非常感谢,thank you.

[root@msgin ~]# ps -eo pid,tty,user,comm,lstart,etime | grep ss5
14600 ?        root     ss5re <defunct> Thu Nov 26 17:30:00 2015       29:44
14627 ?        Vn32     ss5             Thu Nov 26 17:30:01 2015       29:43
14630 ?        Vn31     ss5             Thu Nov 26 17:30:01 2015       29:43
[root@msgin ~]# ps -eo pid,tty,user,comm,lstart,etime | grep ss5
1377 ?        root     ss5re <defunct> Thu Nov 26 18:00:01 2015       00:12
1402 ?        Vn32     ss5             Thu Nov 26 18:00:01 2015       00:12
1405 ?        Vn31     ss5             Thu Nov 26 18:00:01 2015       00:12


跟之前比着多出个ss5re ?


然后还有另外一个释放内存的脚本也是任务计划执行了,但是没有执行脚本中的命令,现在的脚本是
#!/bin/bash
sync
echo 3 > /proc/sys/vm/drop_caches

这个环境变量怎么加呢?麻烦你了


论坛徽章:
5
金牛座
日期:2015-07-03 13:32:00卯兔
日期:2015-07-03 13:32:17程序设计版块每日发帖之星
日期:2015-11-29 06:20:0015-16赛季CBA联赛之同曦
日期:2015-12-15 09:36:06CU十四周年纪念徽章
日期:2016-07-06 17:18:48
18 [报告]
发表于 2015-11-27 09:54 |只看该作者
本帖最后由 seanking1987 于 2015-11-27 09:54 编辑

回复 17# 经纬联科
1、
出现“14600 ?        root     ss5re <defunct> Thu Nov 26 17:30:00 2015       29:44”
并不是好现象,这是僵尸进程(进程已经关闭,但是系统某些资源仍占用),僵尸进程过多可能会造成系统宕机,重启后才能解决。
造成僵尸进程的原因并不清楚,也有可能和ss5服务的某些配置项有关系。

2、通用PATH添加方法:
  1. 在${HOME}/.bash_profile中添加
  2. PATH=$PATH:/sbin:/bin
  3. 然后在所有crontab的shell中添加:
  4. #!/bin/bash
  5. #添加环境变量
  6. . ${HOME}/.bash_profile
  7. #执行动作
  8. .....
复制代码
如果你不想加载环境变量,那么shell中的命令要用绝对路径,比如sync要写成/bin/sync。
------------------------------------------------------------------------------------
1)查看命令路径   which sync---->/bin/sync
2)查看当前PATH路径有没有包含/bin  echo $PATH,如果没有,就要在${HOME}/.bash_profile中添加
   

论坛徽章:
6
羊年新春福章
日期:2015-03-03 17:16:28双子座
日期:2015-03-03 17:16:56巳蛇
日期:2015-03-03 17:17:2415-16赛季CBA联赛之福建
日期:2016-03-11 09:05:00黑曼巴
日期:2016-07-07 16:58:1215-16赛季CBA联赛之吉林
日期:2016-11-14 09:23:07
19 [报告]
发表于 2015-11-27 10:02 |只看该作者
0 5 * * * service ss5 stop
0 5 * * * /usr/sbin/ss5 -t -m -b  1.1.1.2  -u  user2
0 5 * * * /usr/sbin/ss5 -t -m -b  1.1.1.1  -u  user1

论坛徽章:
2
IT运维版块每日发帖之星
日期:2015-07-04 22:20:00操作系统版块每日发帖之星
日期:2015-07-04 22:20:00
20 [报告]
发表于 2015-11-27 21:01 |只看该作者
本帖最后由 经纬联科 于 2015-11-27 21:02 编辑

回复 18# seanking1987


   
非常感谢!因为ss5restart.sh能按任务计划顺利执行,目前观察这一天下来解决了之前的问题。
ss5之前会在运行一段时间后不知道什么原因就会出现内存和cpu使用率突然猛增,高居不下的情况,负载达到60以上,然后ss5服务无法使用,22端口也几乎不通~~
所以想到通过任务计划重启ss5,以释放cpu和内存,从昨天修改ss5restart.sh之后,之前的问题到现在没有出现问题了。再次感谢。

[root@msgin ~]# which sync
/bin/sync
[root@msgin ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[root@msgin ~]# cat ss5restart.sh
#!/bin/bash

#load envionment variables
. ${HOME}/.bash_profile
PATH=$PATH:/sbin

#restart ss5
service ss5 stop
/usr/sbin/ss5 -t -m -b  1.1.1.2  -u Vn32
/usr/sbin/ss5 -t -m -b  1.1.1.1  -u Vn31

[root@msgin ~]# cat freemem.sh
#!/bin/bash

#load envionment variables
. ${HOME}/.bash_profile
PATH=$PATH:/bin

#free memory
sync
echo 3 > /proc/sys/vm/drop_caches

[root@msgin ~]# cat /etc/crontab
*/10 * * * * root /root/ss5restart.sh
*/10 * * * * root /root/freemem.sh


帮看看这样写有问题吗?
echo 3 > /proc/sys/vm/drop_caches 这个不需要添加环境变量么?
有点不清除什么时候需要添加环境变量~~


如果crontab里面有:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
HOME=/

是不是freemem.sh和ss5restart.sh里面就没有必要加载环境变量了?对这个不太明白
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP