"can't cd" 在 init.d 内作为服务启动时
"can't cd" within init.d when started as service
我在 init.d 中有一个非常简单的脚本 运行ning 来启动一个永久使用的节点服务器。直到最近它一直运行良好,我找不到可以改变的地方。我在 Debian 7 上,最近没有做任何更新。
这是我的脚本(从某处复制,并保持简单,用于测试)
#!/bin/sh
#/etc/init.d/nodeup
. /lib/lsb/init-functions
export PATH=$PATH:/usr/local/bin
export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules
. /home/pat/env
cd /var/www/mydir
FOREVER_ROOT=/var/log/forever/mydir
export FOREVER_ROOT
case "" in
start)
exec forever start -m 10 -o $FOREVER_ROOT/output.log -e $FOREVER_ROOT/error.log ./bin/www ./
;;
stop)
exec forever stop ./bin/www
;;
*)
echo "Usage: service nodeup {start|stop}"
exit 1
;;
esac
exit 0
问题是当我运行(启动或停止,效果相同)
sudo service nodeup start
我明白了
/etc/init.d/nodeup: 12: cd: can't cd to /var/www/mydir
如果我 运行 脚本用 sudo /etc/init.d/nodeup 启动
它 运行 完美,没问题。
我不明白发生了什么,或者我的机器上可能发生了什么变化。
知道我现在应该检查什么可能会导致这种行为吗?或者在我的脚本中更改什么以使其再次运行?
感谢您的帮助
我将脚本的 shell 从 sh 更改为 bash
它似乎使脚本更稳定
我在 init.d 中有一个非常简单的脚本 运行ning 来启动一个永久使用的节点服务器。直到最近它一直运行良好,我找不到可以改变的地方。我在 Debian 7 上,最近没有做任何更新。 这是我的脚本(从某处复制,并保持简单,用于测试)
#!/bin/sh
#/etc/init.d/nodeup
. /lib/lsb/init-functions
export PATH=$PATH:/usr/local/bin
export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules
. /home/pat/env
cd /var/www/mydir
FOREVER_ROOT=/var/log/forever/mydir
export FOREVER_ROOT
case "" in
start)
exec forever start -m 10 -o $FOREVER_ROOT/output.log -e $FOREVER_ROOT/error.log ./bin/www ./
;;
stop)
exec forever stop ./bin/www
;;
*)
echo "Usage: service nodeup {start|stop}"
exit 1
;;
esac
exit 0
问题是当我运行(启动或停止,效果相同)
sudo service nodeup start
我明白了
/etc/init.d/nodeup: 12: cd: can't cd to /var/www/mydir
如果我 运行 脚本用 sudo /etc/init.d/nodeup 启动 它 运行 完美,没问题。
我不明白发生了什么,或者我的机器上可能发生了什么变化。 知道我现在应该检查什么可能会导致这种行为吗?或者在我的脚本中更改什么以使其再次运行? 感谢您的帮助
我将脚本的 shell 从 sh 更改为 bash 它似乎使脚本更稳定