Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 程序可以';从init.d脚本启动时无法打开文件_C++_Linux_Ubuntu 12.04_Init - Fatal编程技术网

C++ 程序可以';从init.d脚本启动时无法打开文件

C++ 程序可以';从init.d脚本启动时无法打开文件,c++,linux,ubuntu-12.04,init,C++,Linux,Ubuntu 12.04,Init,提前感谢您阅读我的帖子。当我的程序从init.d脚本启动时,我遇到了一个程序执行不同的问题。它是一个C++程序,我将它存储在/Ur/Studio/bin目录中,同时存储两个属性文件。正确运行程序需要一个属性文件。从命令行调用程序时,一切正常,例如: 我的计划 或 /我的计划 但是当使用init.d脚本启动程序时,二进制文件将无法打开所需的属性文件。我已经检查了init.d脚本(chmod 755)的权限,并确保更新了rc.d(sudo update rc.d myprogram defaults

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

我的计划 或 /我的计划

但是当使用init.d脚本启动程序时,二进制文件将无法打开所需的属性文件。我已经检查了init.d脚本(chmod 755)的权限,并确保更新了rc.d(sudo update rc.d myprogram defaults),但我还没有弄清楚这一点。初始化脚本的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

非常感谢您的帮助。谢谢。

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

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


由于我们没有您的代码,因此无法确定。问题在于您的LBS签名: 如果LBS未完成,则即使是cat命令也无法找到init.d脚本

从init.d READ.ME开始:

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


我假设脚本与可执行文件不在同一目录中?当您尝试打开文件时出现了什么问题?否,init脚本位于/etc/init.d目录中,权限为755。它调用的二进制文件位于/usr/local/bin中。我正在使用ifstream打开文件,我抛出一个错误并打印出“无法打开输入文件。请检查文件和权限!”如果它无法打开内嵌。当然,我已经多次检查了权限,甚至将它们设置为777只是为了看看是否是这样,但没有用。您使用的是相对路径还是绝对路径?(打开属性文件)相对路径,只需./myfile.properties。问题是,如果我只是从命令行执行二进制代码,它就工作得很好。哇,真是太好了!我真的很感谢你的帮助!我将把我的路径更新为绝对路径,以便在将来解决这个问题。再次感谢!当我从命令行和cron运行python脚本时,我也遇到了同样的问题很高兴它有帮助!尽可能接受答案;)
### 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