0

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

我的程序或 ./myprogram

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

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

4

2 回答 2

1

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

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

由于我们没有您的代码,因此无法确定。

于 2013-07-23T01:50:42.167 回答
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

在此处输入图像描述

于 2020-08-03T15:45:26.147 回答