use*_*746 153 unix directory crontab relative-path
我想在root crontab中设置一个每天运行的工作.但我希望它从特定目录执行它,以便它可以找到它需要的所有文件,因为应用程序有一堆相对路径.
无论如何,我可以告诉crontab从特定目录运行吗?
Gil*_*il' 283
所有作业都由shell执行,因此请通过命令启动该shell片段以更改目录.
cd /path/to/directory && ./bin/myapp
Run Code Online (Sandbox Code Playgroud)
dla*_*lin 20
阅读man 5 crontab应该告诉您,有一个HOME可以在文件中重新定义的变量集。它成为您的工作目录。您PATH也可以设置命令。当然,这会影响所有 cron 计划行。
例如
\n\n\n几个环境变量由 cron(8)\ndaemon 自动设置。
\nSHELL设置为/bin/sh、 和LOGNAME是HOME从/etc/passwdcrontab\xc2\xb4s 所有者的行设置的。HOME并且SHELL可以被 crontab 中的设置覆盖;LOGNAME不能。(注意:
\nLOGNAME有时会USER在BSD系统上调用该变量,并且也会自动设置该变量)。
当然取决于你的 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.\nSHELL=/bin/sh\nHOME=/where/the/app/is\nPATH=/where/the/app/is:/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin\nCRON_TZ=UTC\n1 0 * * * theappuser hypothetical --with arguments \nRun Code Online (Sandbox Code Playgroud)\n例如docker-compose依赖 cwd docker-compose.yml:
SHELL=/bin/sh\nHOME=/path/to/composed-app\n5 5 * * * root docker-compose restart -t 10 service-name\nRun Code Online (Sandbox Code Playgroud)\n