0

我有一个 shell 脚本,如果它没有运行,它会启动一个乘客实例:

#!/bin/bash
/usr/sbin/lsof -i :82 > /home/var/www/site-owner/data/www/site.com/currenttest
if [ ! -s /home/var/www/site-owner/data/www/site.com/currenttest ];
  then
    cd /home/var/www/site-owner/data/www/site.com/current/
    passenger start -p 82 -d -e production --user site-owner
fi

如果我从 root ssh 环境启动它,它会非常好用。我尝试从 crontab 启动它,但它没有以错误开头:“passenger_loader.sh:第 12 行:乘客:找不到命令”。

经过数小时的谷歌搜索,我发现来自 root 用户和 root 控制台用户的 crontab 有不同的环境,但无论如何,我不明白如何让 crontab root 用户像 root 控制台用户一样运行脚本。我开始添加

source ~/.bash_profile
source ~/.bashrc 

到一个脚本,但它没有改变任何东西。

4

1 回答 1

0

我不知道这是否是一个解决方案,但它就像我需要的那样工作(我从 bash 开始):

#!/bin/bash

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

HOME=/root
PATH=/usr/local/rvm/gems/ruby-1.9.3-p374/bin:/usr/local/rvm/gems/ruby-1.9.3-p374@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p374/bin:/usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin
export HOME PATH

/usr/sbin/lsof -i :82 > /home/var/www/site-owner/data/www/site.com/currenttest
if [ ! -s /home/var/www/site-owner/data/www/site.com/currenttest ];
  then
    # passenger down
    date
    #. "/usr/local/rvm/scripts/rvm"
    rvm use 1.9.3
    cd /home/var/www/site-owner/data/www/site.com/current/
    passenger start -p 82 -d -e production --user site-owner
fi
于 2013-02-05T15:03:17.530 回答