`

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脚本书写规范.pdf

    - 使用source或点号"."命令执行脚本,这将使脚本在当前Shell环境中执行,而不是创建新的子Shell。 - 脚本权限应该设置为可执行,使用命令“chmod +x my_script.sh”。 - 在执行前,可使用“chown +x ./my_script.sh...

    shell-执行故意错误

    - **错误捕获**:shell脚本中的`set -e`选项可以确保在遇到错误时立即停止执行,而`set -x`则有助于调试,显示脚本每一步的执行情况。 - **错误输出**:使用`echo`命令将错误信息输出到标准错误流(stderr),以便...

    Linux Shell调试技术

    Shell脚本在实际开发过程中可能会遇到各种各样的错误,大致可以分为两大类:语法错误和逻辑错误。 1. **语法错误**:这类错误通常是由于编程时不小心造成的,比如遗漏关键字、引号,或者在需要空格的地方没有添加...

    Linux_shell脚本编写基础

    如果没有这行代码,尝试执行脚本时将会遇到错误。 ##### 2.2 注释 在Shell脚本中,注释是非常重要的,可以帮助他人理解脚本的功能和逻辑。任何以`#`开始的行都将被视为注释,直到行尾。例如: ```bash #!/bin/sh # ...

    CShell基础知识详解

    (在某些情况下这并不是必须的,但这样做也不会有问题),并且需要使用`chmod`命令使文件可执行。然后,可以像调用其他命令一样,通过在命令行上键入脚本文件名来调用它。 - `-f`选项表示快速启动,通过不读取或执行...

    Shell编程(进阶).pdf

    - `./filename`: 这个命令则会在当前Shell进程之外创建一个新的Shell进程来执行脚本。 #### 七、总结 Shell编程进阶部分涵盖了诸如命令替换、括号操作、位置替换以及Source命令等高级主题。这些技术的应用可以帮助...

    Shell程序设计教程.ppt

    /bin/bash`作为首行,指示解释器使用bash执行脚本。例如,`echo`命令用于打印文本,`chmod +x`用来赋予脚本执行权限,`./test.sh`则运行脚本。 5. **运行Shell脚本**:有三种方式运行Shell脚本:`source`(使脚本在...

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

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

    linux shell

    12. **Shell内置命令**:如`cd`改变目录,`echo`打印字符串,`export`设置环境变量,`source`执行脚本并使变量在当前shell中生效。 13. **脚本调试**:可以使用`set -x`开启命令行调试,`set -v`开启命令行打印,`...

    PHP执行shell脚本运行程序不产生core文件的方法

    然而,在使用PHP执行shell脚本运行程序时,有时会遇到不生成core文件的情况。这就给问题诊断带来了困难。本文将介绍如何在使用PHP执行shell脚本时确保能够产生core文件,以便能够更有效地进行问题诊断。 首先,需要...

    开源shell代码

    5. **错误处理和调试**:移植过程中,可能会遇到各种预料之外的问题,因此需要建立良好的错误处理机制,并利用调试工具进行问题定位。 6. **测试**:移植完成后,必须进行详尽的测试,确保所有功能在新平台上正常...

    LINUX与UNIX SHELL编程指南

    除此之外,你还将接触到正则表达式、脚本调试技巧、Shell别名和函数、以及如何编写可执行的Shell脚本。这本书不仅适合初学者,也为经验丰富的系统管理员提供了深入理解Shell编程的宝贵资源。 总之,《LINUX与UNIX ...

    shell练习及答案.zip

    在IT领域,Shell脚本是Linux或Unix操作系统中的一种强大工具,它允许用户通过命令行接口执行自动化任务。"shell练习及答案.zip"这个压缩包文件显然包含了与Shell编程相关的练习题及其对应的解答,这对于学习和提升...

    LINUX与UNIX SHELL编程指南.pdf (已经合成单pdf文件)

    错误处理可以帮助我们优雅地处理脚本运行时可能出现的问题,而调试技巧则有助于找出并修复问题。安全性是任何编程实践中都不能忽视的一环,shell脚本也不例外,书中会教你怎么避免常见的安全漏洞,如不正确的变量...

    python SSH模块登录,远程机执行shell命令实例解析

    接下来,我们将通过编写Python脚本来实现远程登录及Shell命令的执行。示例代码如下: ```python import ssh # 创建SSH客户端对象 my_client = ssh.SSHClient() # 设置自动接受密钥策略 my_client.set_missing_...

    Linux shell编程大集合

    首先,让我们从基础开始,Linux Shell的主要功能包括执行命令、读取和解释脚本、参数处理以及环境变量管理。其中,Bash(Bourne-Again SHell)是最常见的Shell类型,广泛应用于各种Linux发行版。在"┃鸿鹄┃Linux的...

    C shell编程初步

    10. **错误处理**:csh提供了错误处理机制,使得脚本能够在遇到问题时优雅地退出或继续执行。 #### 应用场景 1. **自动化任务**:通过编写csh脚本来自动化重复性的任务,比如定期备份数据、定时执行系统清理等。 ...

    linux&unixShell编程2

    Linux和Unix Shell编程是操作系统管理、自动化任务执行以及脚本编写的重要组成部分。这些系统使用Bourne Again SHell (bash) 作为默认的交互式和非交互式Shell,它是许多Unix-like系统(包括Linux发行版)的标准...

Global site tag (gtag.js) - Google Analytics