shell脚本执行crontab失败的解决方法

crontab有一个坏毛病,就是它总是不会缺省的从用户profile文件中读取环境变量参数,经常导致在手工执行某个 脚本时是成功的,但是到crontab中试图让它定期执行时就是会出错。

crontab 为每个用户分配独立的文件夹,用户访问定时任务时只能访问到自己的定时任务,root 可以通过指令查看所有人的定时任务


 crontab定时执行不生效:

1.环境变量
问题

2.执行路径问题

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

解决方案1

在 .sh文件 开头部分添加:

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变量的值,变量值的长度,变量的一个字串,变量被部分替换后的值等等。

解决方案2

cron从用户所在的主目录中使用shell调用需要执行的命令。cron为每个shell提供了一个默认的环境,Linux下的定义如下:

  SHELL=/bin/bash

  PATH=/sbin:/bin:/usr/sbin:/usr/bin

  MAILTO=用户名

  HOME=用户主目录

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

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

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值