从init.d脚本启动时,程序无法打开文件

时间:2013-07-23 01:41:53

标签: c++ linux ubuntu-12.04 init

提前感谢您阅读我的帖子。我的程序在从init.d脚本启动时执行的方式有问题。这是一个C ++程序,我将它存储在/ usr / local / bin目录中,同时还有两个属性文件。正确运行程序需要一个属性文件。从命令行调用程序时,一切正常,如:

myprogram 要么 ./myprogram

但是当我的init.d脚本用于启动程序时,二进制文件将不会打开所需的属性文件。我已经检查了init.d脚本(chmod 755)的权限,并确保我更新了rc.d(sudo update-rc.d myprogram defaults),但我无法弄清楚这一点。 init脚本的LSB头如下所示:

#!/bin/bash 
### BEGIN INIT INFO
# Provides:         myprogram (where myprogram is the name of the init script)
# Required-Start:       $local_fs $network $remote_fs $syslog
# Required-Stop:        $local_fs $network $remote_fs $syslog
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    myprogram short description
# Description:      Enable service provided by daemon
### END INIT INFO

非常感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:1)

由于您使用相对路径打开文件,因此最有可能出现问题。从脚本启动应用程序时的工作目录是找到脚本的目录,而不是应用程序所在的目录。因此,当您使用相对路径查找文件时,它们与脚本目录相关,这就是为什么在从脚本执行时无法找到它们,但是当您从命令行直接执行时。

您可以通过将脚本移动到应用程序的目录并尝试运行它来测试此理论。如果它在脚本和应用程序位于同一目录时从脚本起作用,那么我是对的。

因为我们没有您的代码,所以无法确定。

答案 1 :(得分:0)

问题出在您的LBS签名上: 如果LBS无法竞争,那么连cat命令都找不到init.d脚本

来自init.d READ.ME:

所有init.d脚本均应具有LSB样式的标头文档 依赖项和默认运行级别设置。标题看起来像这样 (并非所有字段都是必填项):

### BEGIN INIT INFO
# Provides:          skeleton
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Should-Start:      $portmap
# Should-Stop:       $portmap
# X-Start-Before:    nis
# X-Stop-After:      nis
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     true
# Short-Description: Example initscript
# Description:       This file should be used to construct scripts to be
#                    placed in /etc/init.d.
### END INIT INFO

enter image description here