在csh中运行cronjob

时间:2015-01-07 07:10:46

标签: linux cron csh

我有一个用csh编写的脚本,我想每周运行一次。

我尝试使用cronjob,但似乎cronjob试图在sh中运行我的脚本,因此它无法正常工作。

可以做些什么来确保脚本在cronjob中正常运行,或者有没有其他方法可以在不使用cronjob的情况下完成我想要做的事情?

我的cron工作看起来像这样:

0 0 * * 6 source ~/cron_job

〜/ cron_job看起来像:

#!/bin/csh
source ~/.cshrc;
source ~/test_setup;
source ~/start_test

另请注意,直接在终端上运行source ~/cron_job按预期工作但cronjob无效。我收到以下错误:

/bin/sh: source ~/cron_job : No such file or directory

2 个答案:

答案 0 :(得分:3)

0 0 * * 6 source ~/cron_job

这会尝试在当前脚本中“包含”或“获取”该文件;出于多种原因,这是错误的:

  1. 您正在尝试提供csh脚本;
  2. 即使它是sh脚本,cron也希望你运行一个单独的程序,而不是source当前脚本中的某些内容(也许它工作,我从未尝试过,但考虑两个脚本sourcing具有相同变量或函数名称的东西。糟糕!)
  3. 正确的方法是:

    0 0 * * 6 csh -f ~/cron_job
    

    这开始csh; -f是为了防止加载启动文件,这有时会干扰sript的运行。

答案 1 :(得分:-1)

该行为最可能的原因是您在/etc/profile文件中配置了bourne shell。

cron(8)使用您的/etc/profile数据来选择用于执行 crontab(??)作业的shell,以防您需要要使用不同的shell,您可以在子进程中执行它,而不是使用源。

另一种方法是切换到 csh(1)并使用它而不是 sh(1)