在我的用户的 crontab 中,在 CentOS 系统上,我有类似这样的内容:
58 12 * * * cd /home/joe/dev; echo `pwd` | logger
这输出在 /var/log/messages 中:
Feb 19 12:58:01 srv01 joe: /home/joe
而不是输出:
Feb 19 12:58:01 srv01 joe: /home/joe/dev
为什么输出的时候没有保留目录pwd
?
答案1
以下应该有效:
58 12 * * * (cd /home/joe/dev; echo `pwd` | logger)
通过将命令括在括号中,您应该强制它们全部在同一个子 shell 中运行。
答案2
这些命令是独立运行的,因此与期望它们在同一个 shell/环境中运行不同。您可能更愿意创建一个执行所需命令的 shell 脚本,然后从 crontab 调用该脚本。
更新:以上内容是猜测,和/或建议的可能性(正如评论如此简洁而积极地指出的那样)。所以我决定在 CentOS 6.6 上进行测试,结果...我错了...以下 crontab 条目正常工作:
* * * * * echo \`pwd` |logger; cd /home; echo `pwd` |logger;
所以这应该对你有用...我仍然坚持认为你最好通过调用脚本而不是 crontab 中的单个命令来提供服务...但这是一种偏好(所以请在评论中保持友善...)。
答案3
按照这个Unix&Linux SE答案,您可以替换;
为&&
,因为不同 Linux 发行版中的不同版本的 cron 以不同的方式处理此类功能:
cd /home/joe/dev && echo `pwd` | logger