我有一个用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 :(得分:3)
0 0 * * 6 source ~/cron_job
这会尝试在当前脚本中“包含”或“获取”该文件;出于多种原因,这是错误的:
csh
脚本; sh
脚本,cron
也希望你运行一个单独的程序,而不是source
当前脚本中的某些内容(也许它将工作,我从未尝试过,但考虑两个脚本sourcing
具有相同变量或函数名称的东西。糟糕!)正确的方法是:
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)。