设置
我的计算机上有几个bashfiles,我想定期运行。
我可以在终端(Mac OS)中手动运行bashfiles,例如cd
将自己带到正确的文件夹并随后执行,
./France_run.txt
给出了期望的结果。
<小时/> 的问题
我不想手动运行bashfiles。
我已经在crontab中创建了cronjobs,例如
0 0 * * 2 /Users/mypath/France_run.txt
应该在每个星期二00:00运行。然而,没有任何事情发生。
我只是引用该文件并且错过了运行此脚本&#39;命令?或者是别的什么?
答案 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.txt
(cd
是内置的Bash,因此没有指定路径的路径)