【问题标题】:cd to symbolically linked directory fails in cron environmentcd 到符号链接目录在 cron 环境中失败
【发布时间】:2013-02-21 01:14:52
【问题描述】:

我有一台运行 Ubuntu 12.04 的服务器,我们用它来托管 Rails 应用程序。我在 cron 上运行一个任务,它由几个由 && 分隔的 unix 命令组成 - 例如:

cd /home/deploy/app/current && RAILS_ENV=production ...

最后一点已被剪断,因为该命令在第一个 cd 上失败,如下所示:

cd: 没有这样的文件或目录

deploy 用户的环境中 cd 可以正常工作。该目录存在,并且是一个符号链接:

lrwxrwxrwx 1 deploy deploy 42 Mar  4 15:28 /home/deploy/app/current -> /home/deploy/app/releases/20130304152305

我觉得很奇怪,shell cd 到符号链接的能力会受到环境的影响,所以我把 cron 的环境变量吐到一个文件中,根据这个问题:How to simulate the environment cron executes a script with?

如果我尝试以 cron 用户身份执行该行,则会失败:

$ env - $(cat ~/cron.env) cd /home/deploy/app/current
env: cd: No such file or directory

为什么会这样? cron 的环境变量是:

HOME=/home/deploy
LOGNAME=deploy
PATH=/usr/bin:/bin
LANG=en_US.UTF-8
SHELL=/bin/sh
PWD=/home/deploy

【问题讨论】:

    标签: shell ubuntu cron environment-variables cd


    【解决方案1】:

    cd 是内置的 shell,而不是程序,因此 cronenv 都不能直接执行它。以下内容应该适用于您的 cron 作业:

    sh -c "cd /home/deploy/app/current && RAILS_ENV=production ..."
    

    【讨论】:

    • 我所看到的这很有意义。我一直认为 cron 会自动在 shell 中运行命令,但事实证明这不是真的!谢谢
    猜你喜欢
    • 1970-01-01
    • 2016-10-14
    • 2023-03-14
    • 1970-01-01
    • 2021-02-18
    • 2013-07-28
    • 1970-01-01
    • 2012-09-20
    相关资源
    最近更新 更多