我想在根crontab中设置一个每天运行的作业。但我希望它从一个特定的目录执行它,这样它就可以找到它需要的所有文件,因为应用程序有一堆相对路径。
不管怎样,我能告诉crontab从特定的目录运行吗?
发布于 2012-01-18 02:40:11
所有作业都是由shell执行的,因此可以通过更改目录的命令启动该shell片段。
cd /path/to/directory && ./bin/myapp关于使用&&而不是;:通常不会有什么不同,但是如果使用&&的cd命令失败(例如,因为目录不存在),则应用程序不会执行,而使用;则会执行(但不在目标目录中)。
发布于 2020-10-21 01:49:50
阅读man 5 crontab应该会告诉您,有一个HOME变量集可以在文件中重新定义。它将成为您的工作目录。您也可以为命令设置PATH。当然,这会影响所有cron调度行。
例如。
有几个环境变量是由cron(8)守护进程自动设置的。
SHELL设置为/bin/sh,LOGNAME和HOME是从crontab所有者的/etc/passwd行设置的。crontab中的设置可以覆盖HOME和SHELL;LOGNAME不能。
(注意:在BSD系统上,LOGNAME变量有时也称为USER,也是自动设置的)。
当然,这取决于您的cron,但我的也有MAILTO、MAILFROM CONTENT_TYPE、CRON_TZ、RANDOM_DELAY和MLS_LEVEL。
因此,对于您的假设应用程序,我建议使用包含以下内容的文件名/etc/cron.d/hypothetical:
# Runs hypothetical app @ 00:01Z in its local path for reading its config or something.
SHELL=/bin/sh
HOME=/where/the/app/is
PATH=/where/the/app/is:/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
CRON_TZ=UTC
1 0 * * * theappuser hypothetical --with arguments 例如,使用依赖于cwd docker-compose.yml的docker-compose
SHELL=/bin/sh
HOME=/path/to/composed-app
5 5 * * * root docker-compose restart -t 10 service-namehttps://stackoverflow.com/questions/8899737
复制相似问题