Chinaunix首页 | 论坛 | 博客
  • 博客访问: 402476
  • 博文数量: 105
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 889
  • 用 户 组: 普通用户
  • 注册时间: 2016-01-23 21:45
个人简介

目前在一家电信公司就职报表开发工程师,2010年开始从事运维方面的工作,期间从事过业务维护工程师、自动化运维工程师,2016年转为报表开发工程师。有耐心,抗压力、爱折腾,喜欢研究自动化工具。

文章分类

全部博文(105)

分类: 其他UNIX

2018-03-02 17:16:49

问题描述:crontab中启动的shell脚本不能正常运行,但是使用手动执行没有问题,在$home/.profile中设定了脚本所需要的环境变量。

cron命令的默认shell是/bin/sh,如果要在cron启动的脚本中使用ksh,就必须在脚本中的第一行添加“!/bin/sh”的声明。

如果cron进程启动的shell脚本设置了用户登录时的环境变量,就必须在cron启动的shell脚本中添加下面的内容,才能够在启动的脚本中使用$home/.profile文件中的环境变量。

在shell中加载一个文件可以用.和source两种方式,即
. $home/.profile(用户环境变量) 或者 source /etc/profile(系统环境变量)
这是因为cron进程执行的shell脚本是不会自动加载用户目录下的.profile文件,所以需要脚本自己加载所需要的环境变量。

crontab环境变量的问题:

crontab是进行例行性工作常用的命令,比如系统备份,编写一个备份的shell脚本后,使用crontab定时执行这个备份脚本,就可实现自动备份了。将备份时间设置在三更半夜系统访问量小的时候,既不会影响系统日常使用,也不用派人盯着,第二天看一下邮件,检查一下执行结果就好了。这里就不描述如何使用crontab了,这些资料网上一大把,下面将我使用crontab曾经犯过的几个错误和大家分享一下

1.使用普通变量

crontab执行shell时只能识别为数不多的系统环境变量,普通变量是无法识别的,如果在编写的脚本中需要使用变量,需要使用export将变量声明为环境变量,脚本才能正常执行。

2.使用相对路径

crontab执行shell时,是不会进入到shell脚本所在的路径下执行的,如果shell里含有相对路径的话,会找不到路径的,因此shell脚本中都要使用绝对路径。

3.权限设置错误


权限问题永远是linux需要注意的问题,一定要确保crontab的执行者(/etc/crontab文档设置的第二项)有访问shell脚本所在目录并且执行此shell的权限(可使用chomd和chown修改权限和所有者)。


阅读(4965) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~