`

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),以便...

    9 个实用 shell 脚本

    除此之外,脚本中使用了多个Shell脚本编写中常用的命令和工具,例如: - date命令:用于获取和格式化当前时间。 - tail命令:用于读取文件的最后几行。 - grep命令:用于搜索文件中包含特定内容的行。 - awk命令:...

    Linux Shell调试技术

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

    linux学习笔记及其shell脚本学习教程

    Shell脚本使用Shell解释器来执行,常见的Shell解释器包括bash、sh、csh等。通过Shell脚本,用户可以自动化重复性任务,简化复杂的操作过程,实现更加高效的系统管理。 在Linux学习的过程中,了解和掌握Shell脚本是...

    linux命令行与shell脚本编程大全第三版随书练习_shell_demo.zip

    在学习Shell脚本编程时,会遇到各种脚本编写技巧,例如变量的使用、数组的操作、命令的替代、算术运算、文件测试以及正则表达式的应用等。除此之外,还会接触到各种控制结构,包括if条件语句、case选择结构、for循环...

    Linux_shell脚本编写基础

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

    CShell基础知识详解

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

    快捷运维,代号kjyw,项目基于shell、python,运维脚本工具库,收集各类运维常用工具脚本,实现快速安装ngin.zip

    kjyw项目可以广泛应用于任何需要进行系统运维管理的场景中,尤其是对于那些需要频繁执行脚本进行部署、监控和维护的服务。通过这个工具库,运维人员可以更加专注于解决系统中出现的高难度问题,而不是将时间浪费在...

    批量远程执行linux_shell命令_remote_shell.zip

    “批量远程执行linux_shell命令_remote_shell.zip”这一工具包的出现,不仅能够帮助管理员提高工作效率,还能在大规模的服务器管理中发挥重要作用。通过对该工具的熟练使用,系统管理员可以更加高效、安全地执行远程...

    Shell编程(进阶).pdf

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

    通过参数自动执行SSH访问LinuxUnix主机脚本,执行简单方便,对于没有配置免

    在配置SSH密钥认证机制方面,自动执行脚本通常会采用公钥认证方式。这意味着用户需要在本地生成一对SSH密钥(包括私钥和公钥),然后将公钥复制到远程主机的指定位置。这样,远程主机就可以使用这个公钥来验证本地...

    一系列shell脚本工具. 一系列安装脚本,支持一键安装Git、bash-support、my

    本篇文章所要介绍的,正是一款集成了多种功能的shell脚本工具集,它能够实现一键安装和故障备份,大大简化了开发者在日常工作中遇到的技术难题。 首先,该脚本工具集的第一个亮点是一键安装功能。用户通过执行一个...

    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. **测试**:移植完成后,必须进行详尽的测试,确保所有功能在新平台上正常...

Global site tag (gtag.js) - Google Analytics