crontab作业的正确执行命令是什么?

时间:2017-06-02 21:29:07

标签: cron

设置

我的计算机上有几个bashfiles,我想定期运行。

我可以在终端(Mac OS)中手动运行bashfiles,例如cd将自己带到正确的文件夹并随后执行,

./France_run.txt

给出了期望的结果。

<小时/> 的问题

我不想手动运行bashfiles。

我已经在crontab中创建了cronjobs,例如

 0       0       *       *       2       /Users/mypath/France_run.txt

应该在每个星期二00:00运行。然而,没有任何事情发生。

我只是引用该文件并且错过了运行此脚本&#39;命令?或者是别的什么?

1 个答案:

答案 0 :(得分:0)

您可能只是引用该文件,它可能在某处(通常是/var/log/message)或root用户的邮件文件中记录错误...默认情况下在Mac上禁用)。

通过cron运行脚本的事情是它在不同的环境下运行。当您通常登录到Bash会话时,会自动设置某些环境变量,因此系统会自动检查路径(文件系统中可以找到可执行文件的位置)等内容。不同类Unix系统处理这种情况的方式略有不同......我不记得Macs如何处理它的细节,但在某些系统上,我必须明确提供完整路径,例如,Bash可执行文件为了让事情发挥作用。

脚本的可执行文件的位置通常是/bin/bash,或/bin/sh,或类似的东西。因此,当进行Bash会话时,如果您调用/Users/mypath/France_run.txt并且该文件是可执行的Bash脚本(例如,第一行类似#!/bin/bash并且文件的可执行位已设置),则系统自动知道运行类似/bin/bash /Users/mypath/France_run.txt的内容。

然而,在cron的上下文中,您不会自动获得这些便利,因此您可能必须拼出所有内容(即指定所有二进制文件或可执行文件的完整路径)。同样,情况并非总是如此。我只是看了一个Debian系统,在那里我创建了一些cron作业来运行脚本,我不必在那里调用/bin/bash,但我记得在过去的Mac上必须做类似的事情。< / p>

所以你的cron作业可能只需要指定Bash二进制文件的完整路径:

0 0 * * 2 /bin/bash /Users/mypath/France_run.txt

如果France_run.txt对系统二进制文件(如ls)进行任何调用,您可能还需要完全限定这些内容(/bin/ls而非ls)。

此外,根据脚本的编写方式,甚至可能需要cd进入脚本目录,就像您手动运行它一样:

0 0 * * 2 cd /Users/mypath; /bin/bash ./France_run.txtcd是内置的Bash,因此没有指定路径的路径)