在 csh 中运行 cronjob

Running cronjob in 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
0 0 * * 6 source ~/cron_job

这会尝试 "include" 或 "source" 当前脚本中的文件;这是错误的,原因有很多:

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

正确的方法是:

0 0 * * 6 csh -f ~/cron_job

这开始csh-f 是为了防止加载启动文件,这有时可能会干扰脚本的 运行ning。

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

cron(8) 使用您的 /etc/profile 数据 select shell 用于执行您的 crontab (??) 个作业,所以如果您想使用不同的 shell,您可以在子流程中完成,而不是使用源代码。

另一种方法是切换到 csh(1) 并使用它代替 sh(1).