基于此帖子here,我试图在文件夹/etc/init.d/
中创建一个名为raumserver
的可执行文件,其内容如下:
#! /bin/sh
# /etc/init.d/raumserver
### BEGIN INIT INFO
# Provides: raumserver
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Example initscript
# Description: This file should be used to construct scripts to be
# placed in /etc/init.d.
### END INIT INFO
# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting raumserver.js"
# run application you want to start
node /home/openhabian/node_modules/node-raumserver/raumserver.js > /home/openhabian/node_modules/node-raumserver/logs/RPiraumserver.js
#/home/pi/downloads/node-v0.10.24-linux-arm-pi/bin/node /home/pi/test.js >> /home/pi/test.log
;;
stop)
echo "Stopping raumserver.js"
# kill application you want to stop
killall -9 node
# Not a great approach for running
# multiple node instances
;;
*)
echo "Usage: /etc/init.d/raumserver {start|stop}"
exit 1
;;
esac
exit 0
您看到我的nodeJS应用程序驻留在/home/openhabian/node_modules/node-raumserver/
中,并被命名为raumserver.js
当我通过/etc/init.d/raumserver start
运行此可执行文件时,我得到WARNING: No configurations found in configuration directory:/etc/init.d/config
的错误消息,该错误消息会导致错误,因为在此配置中,它声明使用另一个端口代替已在使用的8080。因此可执行文件本身不会运行。
这是基于以下事实:该可执行文件正在该可执行文件所在的config
的当前路径中查找文件夹/etc/init.d/config
,该文件夹不存在。由于nodeJS应用程序的路径为/home/openhabian/node_modules/node-raumserver/
,所以我希望它在该目录下查找在那里可用的文件夹。
为什么会发生这种情况,我该如何更改?
我的计划是在启动时通过守护程序运行此可执行文件。我在那里的计划是去chmod +x /etc/init.d/raumserver
,然后去sudo update-rc.d raumserver defaults
,我在网上阅读并且应该可以使用。
关于如何告诉应用程序在引用的nodeJS-application文件夹中查找的任何想法?我很快想到了将config
文件夹复制到/etc/init.d/
的方法,但是我想这对于以后的更新等非常不明智。
预先感谢
答案 0 :(得分:0)
似乎您的某些代码使用.
作为路径基础,而不是使用__dirname
(这是模块的目录名)。
如果要寻址相对于模块的文件,则需要使用:
absolute_path = path.join(__dirname, relative_path)
而不是让.
解析为process.cwd()
设置服务时,有助于同时打印process.cwd()
和process.env
,特别是process.env.PATH
。如果这些输出的值不正确,则可以在服务设置或程序中对其进行修正,
答案 1 :(得分:0)
由于nodeJS应用不是我的,并且我无法更改它,所以我想这是没有选择的。 :-(
还有另一个问题: 是否有可能让当前的可执行文件(在启动时)运行在相对路径中的另一个可执行文件,该文件随后将平稳运行?
我试图将可执行文件raumserver
的内容更改为以下内容:
### BEGIN INIT INFO
# Provides: raumserver
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Example initscript
# Description: This file should be used to construct scripts to be
# placed in /etc/init.d.
### END INIT INFO
# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting raumserver.js"
# run application you want to start
#node /home/openhabian/node_modules/node-raumserver/raumserver.js > /home/openhabian/node_modules/node-raumserver/logs/RPiraumserver.js
/home/openhabian/node_modules/node-raumserver/raumstartup >> /home/openhabian/node_modules/node-raumserver/logs/raumstartup.log
;;
stop)
echo "Stopping raumserver.js"
# kill application you want to stop
killall -9 node
# Not a great approach for running
# multiple node instances
;;
*)
echo "Usage: /etc/init.d/raumserver {start|stop}"
exit 1
;;
esac
exit 0
和raumstartup看起来像这样:
### BEGIN INIT INFO
# Provides: raumserver
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Example initscript
# Description: This file should be used to construct scripts to be
# placed in /etc/init.d.
### END INIT INFO
# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting raumserver.js"
# run application you want to start
node /home/openhabian/node_modules/node-raumserver/raumserver.js > /home/openhabian/node_modules/node-raumserver/logs/RPiraumserver.js
#/home/openhabian/node_modules/node-raumserver/raumstartup >> /home/openhabian/node_modules/node-raumserver/logs/raumstartup.log
;;
stop)
echo "Stopping raumserver.js"
# kill application you want to stop
killall -9 node
# Not a great approach for running
# multiple node instances
;;
*)
echo "Usage: /etc/init.d/raumserver {start|stop}"
exit 1
;;
esac
exit 0
但是以某种方式这种方法行不通。 :-(我知道这不是最佳做法,但是到目前为止,这似乎仍然是合法的方式... 对我的方法有任何想法,或者甚至更好-原因为何?
我可以通过sudo /etc/init.d/raumserver start
手动启动第一个文件,但不能启动raumstartup:-(