`

shell之外的地方执行脚本遇到的问题

阅读更多

这周装服务器,系统,应用都OK后,发现有的crontab脚本中的命令无法执行,苦思了两天,还是以下提供的建议解决了我的问题。

最近碰到一个问题,shell脚本直接运行和crontab设置好定时运行的结果不一样,郁闷.
脚本是向远端数据库写入记录,直接运行可以在远端写入记录,而在crontab中定时,脚本是已经执行了,可是并没有向远端数据库写入记录.

2008-1-17 11:25 merlin852
贴你的脚本看看

2008-1-17 11:30 waker
环境不同

2008-1-17 11:41 xmbbx
原帖由 merlin852 于 2008-1-17 11:25 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7863769&ptid=1043728][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
贴你的脚本看看



/etc/crontab:

20 */1 * * * root /root/check.sh

/var/log/cron:
Jan 17 08:20:00 ns000 CROND[8594]: (root) CMD (/root/check.sh)
Jan 17 09:20:00 ns000 CROND[8621]: (root) CMD (/root/check.sh)
Jan 17 10:20:00 ns000 CROND[8648]: (root) CMD (/root/check.sh)
Jan 17 11:20:00 ns000 CROND[8675]: (root) CMD (/root/check.sh)


cat /root/check.sh:

#!/bin/bash
>/root/temp.txt
tcpdump -nnnv udp   >>/root/temp.txt &

time_for_check=`date "+%R" -d'1 minute'`
sleep 120
killall tcpdump
data=`grep "$time_for_check" /root/temp.txt|grep "53:"|wc -l`
getip=`ip a|grep eth0|awk 'END{print $2}'|cut -d'/' -f1`
hostname=`hostname`

mysql -h 222.*.*.* -u user -p password databaes -e "insert into data values ('','$hostname','$getip','$data',now())"

[ 本帖最后由 xmbbx 于 2008-1-17 11:44 编辑 ]

2008-1-17 11:52 galford433
mysql的环境加到cron里面。或者用绝对路径/usr/bin/mysql ?
tcpdump最好也用绝对路径。

[ 本帖最后由 galford433 于 2008-1-17 11:54 编辑 ]

2008-1-17 12:40 gucuiwen
[size=7]一招必杀:
在脚本最前面加上一句:

source ~/.bash_profile

这样运行环境就一摸一样了。加上这句后,直接执行能成功的脚本放在crontab里都能执行。

[/size]

2008-1-17 12:43 gucuiwen
所有的crontab问题只有两种可能,

1,环境
2,路径

而第二种问题往往又是第一种问题引起的,所以加上环境后,.bash_profile里的环境后99%的问题都一招通杀。

[size=5].bash_profile会读取.bashrc
.bashrc 会读取 /etc/bashrc
/etc/bashrc 会读取 /etc/profile
[/size]
一个linux所有的系统用户,所有的环境变量,都逃不出以上几个文件。(前提是你用bash)

2008-1-17 13:24 xmbbx
感谢楼上的各位,确实是环境(路径)的问题,已经解决.
gucuiwen解释的很清楚,非常感谢.
分享到:
评论

相关推荐

    Linux-shell-study:学习Linux shell 脚本编程时写的一些脚本代码

    除此之外,shell脚本中的条件测试语句可以单独执行.##退出状态含义以及退出状态的设置####退出状态含义数字0表示命令,脚本或者程序成功执行,没有发生错误.数字1表示在执行过程中发生了某些错误,没有成功执行.由于退出...

    Bash-DFT-Tools:结合基于量子化学程序高斯和SLURM的计算系统使用的bash脚本

    除了这些脚本之外,我还包括一个故障排除文档,其中包含我所遇到的问题及其相应的解决方案。疑难解答文档和本自述文件使用markdown(.md文件扩展名)进行格式化,因此最容易使用具有markdown功能的编辑器(有扩展名...

    ARM_Linux启动分析.pdf

    在i386体系结构中,因为i386本身的问题,在 "arch/alpha/kernel/head.S"中需要更多的设置,但最终也是通过call SYMBOL_NAME(start_kernel)转到start_kernel()这个体系结构无关的函数中去执行了。 所不同的是,在...

    Linux OpenPbs 批处理作业和计算机系统资源管理软件包

    这样,它就可以接受批处理作业、shell脚本和控制属性,作业运行前对其储存并保护,然后运行作业,并且把输出转发回提交者。 PBS可以被安装并配置运行在单机系统或多个系统组来支持作业处理。由于PBS的灵活性,多个...

    PERL语言编程

    比如你用不着知道什么特殊的指令就可以编译 Perl 程序--只要把它当做批处理或者 shell 脚本执行就可以了。Perl 的类型和结构很容易使用和理解。Perl 对你的数据没有任何限制--你的字串和数组可以要多长就多长(只要...

    快捷方式图标去箭头

    自己第一次遇到快捷方式图标问题(箭头图标变黑块)是在2013年10月份, 当时并没太在意,只是通过搜索网络找了个普通办法解决了。 但站在现在的位置看当初,那应该是一个临时的处理办法,并不是根治问题的方法。 ...

    入门学习Linux常用必会60个命令实例详解doc/txt

    例如,用户登录后,按一下“Alt+ F2”键,用户就可以看到上面出现的“login:”提示符,说明用户看到了第二个虚拟控制台。然后只需按“Alt+ F1”键,就可以回到第一个虚拟控制台。一个新安装的Linux系统允许用户使用...

    数据库灾难性恢复(数据库技术;灾难性;恢复;数据备份)

    如果备份时遇到服务器性能问题,可以有帮助的一个策略是在从服务器而不是主服务器上建立复制并执行备份。如果使用Veritas文件系统,可以这样备份: 1. 从客户端程序执行FLUSH TABLES WITH READ LOCK。 2. 从另一个...

    Microsoft SQL Server 2005 Express Edition SP3

    出现该错误的原因是命令 shell 脚本不支持路径变量中包含的括号。在将 32 位组件安装到 64 位计算机的 Windows (WOW64) 32 位子系统中的 Windows 时可能会出现该错误。例如,下列路径值为“C:\Program Files (x86)\...

    linux教程——很使用的那种

    linux系统结构:硬件、内核层、shell层、应用层、用户。 在安装linux的时候,会弹出 CD Found To begin testing the CD media before installation press OK. Choose Skip to skip the media test and ...

    易语言程序免安装版下载

    操作系统界面功能支持库(shell.fne)中的“执行()”命令增加一个参数“窗口显示方式”,作用与核心库“运行()”命令的同名参数一致。 6. 数据库操作支持库增加读写长整数字段的功能,但受限于系统接口暂不能读写...

    网管教程 从入门到精通软件篇.txt

    Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的诊断和测试以及恢复系统功能的工具。小编的确一直都想把这方面的命令做个总结,这次辛苦老范给我们整理了这份实用的秘笈。 ...

Global site tag (gtag.js) - Google Analytics