Crontab源文件

时间:2011-05-09 08:45:18

标签: linux crontab

最近我创建了一个bash脚本,我应该在cron中运行。

准备好bash脚本及其正常工作后,我把它放在Cron中,发现它失败了。与第二步一样,我删除了所有环境依赖项,而不仅仅是file.txt,我指定了/home/blah-blah/file.txt

我仍然发现脚本仍在一步失败。该步骤是一种数据处理工具。 我执行的命令是/bin/blah-blah/processing_tool -parameter $INDEX,其中$INDEX是在bash脚本中计算的变量。

第三步是在bash脚本的开头添加bash配置文件作为源。瞧!!!!该脚本从cron开始完美执行。

我的问题是,为什么即使在我从脚本中删除了所有环境依赖项后,也会发生这种情况。我也听说不建议将bron作业转换为bash配置文件。如果是这样,有没有其他方法可以避免这样做。

2 个答案:

答案 0 :(得分:2)

基本上:从cron开始的任何东西都是以完全干净的方式开始的。 您不能对环境变量的内容或任何从cron运行的脚本开头的当前文件夹中的任何文件夹做任何假设。

最简单的解决方案: cd到所需的目录,以确保您的路径在所需的位置。 源/ etc / profile确保您获得系统范围的环境变量设置。 source~myuserid / .profile来读取您的个人环境设置。 (〜/ .profile将不起作用,因为它表示cron用户。) 然后开始执行实际的脚本。 当然,上面的方法要求cron进程具有对你的home-dir的读访问权,并且它可能正在做更多的实际需要的工作。

稍微复杂一点:弄清楚脚本需要哪些环境变量以及脚本调用的任何内容。 在cron脚本的开头明确地导出它们。

(P.s。替换/ etc / profile和~myuserid / .profile以及所选shell的相应文件。)

答案 1 :(得分:0)

可以将cron视为单独的用户。因此,这个“用户”可能不会“看到”或“读取”与您相同的文件。因此,必须以绝对值定义所有路径名等。

每个脚本都在自己的进程中运行。因此,当您运行脚本时,您可以更改$SHELL和其中的任何其他变量,但一旦您退出它就会丢失。我的猜测是$INDEX变量计算可能已在脚本中成功计算,但在脚本之外的使用可能已失败。如果没有关于它是什么工作或者你想做什么的更多信息,很难说清楚。

运行cron作业有两种方法:

  1. 以root身份,您可以在su -user -c < job >中运行root crontab
  2. 正如您所做的那样,明确地采购您的个人资料。
  3. 您还可以在crontab中设置环境变量。
  4. 作为用户crontab中的用户,您可以像下面这样运行它:"/home/blah/.profile && myScript"
  5. 也就是说,当你运行cron作业时,你的环境变量(除了文件扩展名)之外就不存在了。您必须使用-x flag (in bash)执行该脚本,然后对输出进行细化。在您的环境变量和diff之间使用root/cron可能是一个指针。另外,检查脚本中是否存在某些实用程序,这些实用程序的位置不属于cron / root的$PATH变量。