shell脚本直接执行没有问题,crontab定时执行失败的解决方法

来源:互联网 发布:战舰世界岛风鱼雷数据 编辑:程序博客网 时间:2024/05/17 23:22

crontab 定时执行不生效:

1.环境变量问题

2.执行路径问题

问题2往往可以归结为问题1,即配置环境变量。


1.方法:

在开头部分添加:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export PATH

注意,没有$,这里shell中默认把变量值当作字符串

shell变量是一种很“弱”的变量,默认情况下,一个变量保存一个串,shell不关心这个串是什么含义。所以若要进行数学运算,必须使用一些命令例如let、declare、expr、双括号等。shell变量可分为两类:局部变量和环境变量。局部变量只在创建它们的shell中可用。而环境变量则可以在创建它们的shell及其派生出来的任意子进程中使用。有些变量是用户创建的,其他的则是专用shell变量。变量名必须以字母或下划线字符开头。其余的字符可以是字母、数字(0~9)或下划线字符。任何其他的字符都标志着变量名的终止。名字是大小写敏感的。给变量赋值时,等号周围不能有任何空白符。为了给变量赋空值,可以在等号后跟一个换行符。用set命令可以查看所有的变量,unset var命令可以清除变量var,var相当于没有定义过。readonly var可以把var变为只读变量,定义之后不能对var进行任何更改。对shell变量的引用方式很多,用这些方式可以方便的获取shell变量的值,变量值的长度,变量的一个字串,变量被部分替换后的值等等。


-----------------------------我是分割线-------------------------------------

1.什么是环境变量?
环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,比如临时文件夹位置和系统文件夹位置等。这点有点类似于DOS时期的 默认路径,当你运行某些程序时除了在当前文件夹中寻找外,还会到设置的默认路径中去查找。简单地说这里的“Path”就是一个变量,里面存储了一些常用命 令所存放的目录路径。

2.常见的环境变量。
PATH:系统路径.
HOME:当前用户家目录
HISTSIZE:保存历史命令记录的条数。
LOGNAME:当前用户登录名。
HOATNAME:主机名称,若应用程序要用到主机名的话,一般是从这个环境变量中的取得的.
SHELL:当前用户用的是哪种shell.
LANG/LANGUGE:和语言相关的环境变量,使用多种语言的用户可以修改此环境变量.
MAIL:当前用户的邮件存放目录.

3.设置环境变量的方法。
etho:显示指定环境变量。
export:设置新的环境变量。
env:显示所有环境变量。
set:显示所有本地定义的shell变量。
unset:清除环境变量。

4.几个实例。
①. 显示环境变量HOME

$ echo $HOME

/home/leon

设置一个新的环境变量hello

$ exportHELLO="Hello!"   

$ echo $HELLO

Hello!

使用env命令显示所有的环境变量

$ env

HOSTNAME=redbooks.safe.org

PVM_RSH=/usr/bin/rsh

SHELL=/bin/bash

TERM=xterm

HISTSIZE=1000

 ...

④ 使用set命令显示所有本地定义的Shell变量

 $ set

 BASH=/bin/bash

 BASH_VERSINFO=([0]="2"[1]="05b"[2]="0"[3]="1"[4]="release"[5]="i386-redhat-linux-gnu")

 BASH_VERSION='2.05b.0(1)-release'

 COLORS=/etc/DIR_COLORS.xterm

 COLUMNS=80

 DIRSTACK=()

 DISPLAY=:0.0

  ...

⑤使用unset命令来清除环境变量

set可以设置某个环境变量的值。清除环境变量的值用unset命令。如果未指定值,则该变量值将被设为NULL。示例如下:

$ exportTEST="Test..." #增加一个环境变量TEST

$ env|grep TEST #此命令有输入,证明环境变量TEST已经存在了

TEST=Test...

$ unset $TEST #删除环境变量TEST

$ env|grep TEST #此命令没有输出,证明环境变量TEST已经存在了

⑥ . 使用readonly命令设置只读变量

如果使用了readonly命令的话,变量就不可以被修改或清除了。示例如下:

$ exportTEST="Test..." #增加一个环境变量TEST

$ readonly TEST #将环境变量TEST设为只读

$ unset TEST #会发现此变量不能被删除

-bash: unset: TEST: cannotunset: readonly variable

$ TEST="New" #会发现此也变量不能被修改

-bash: TEST: readonlyvariable

环境变量的设置位于/etc/profile文件

如果需要增加新的环境变量可以添加下属行

exportpath=$path:/path1:/path2:/pahtN

5.想将一个路径加入到$PATH中,可以像下面这样做:

①. 控制台中:

$ PATH="$PATH:/my_new_path"

②. 修改profile文件:

$ vi /etc/profile

在里面加入:

export PATH="$PATH:/my_new_path"

③. 修改.bashrc文件:
       $ vi /root/.bashrc

在里面加入:

export PATH="$PATH:/my_new_path"

后两种方法一般需要重新注销系统才能生效,最后可以通过echo命令测试一下:

$ echo $PATH

看看输出里面是不是已经有了/my_new_path这个路径了。



0 0
原创粉丝点击