簡體   English   中英

從 init.d 腳本啟動時程序無法打開文件

[英]Program can't open file when started from init.d script

提前感謝您閱讀我的帖子。 當我的程序從我的 init.d 腳本啟動時,我的程序表現出不同的問題。 這是一個 C++ 程序,我將它與兩個屬性文件一起存儲在 /usr/local/bin 目錄中。 需要屬性文件之一才能正確運行程序。 從命令行調用程序時一切正常,例如:

myprogram 或 ./myprogram

但是當我的 init.d 腳本用於啟動程序時,二進制文件不會打開所需的屬性文件。 我已經檢查了 init.d 腳本 (chmod 755) 的權限,並確保我更新了 rc.d(sudo update-rc.d myprogram 默認值),但我無法弄清楚這一點。 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

任何幫助都非常感謝。 謝謝。

由於您使用相對路徑在此處打開文件,因此很可能是問題所在。 從腳本啟動應用程序時的工作目錄是找到腳本的目錄,而不是應用程序所在的目錄。 因此,當您使用相對路徑來查找文件時,它們是相對於腳本目錄的,這就是為什么當您從腳本執行時它無法找到它們,而當您直接從命令行執行時卻可以找到它們。

您可以通過將腳本移動到應用程序的目錄並嘗試運行它來測試這個理論。 如果它在腳本和應用程序位於同一目錄中時從腳本工作,那么我是對的。

沒有什么可以確定的,因為我們沒有您的代碼。

問題出在你的 LBS 簽名上:如果 LBS 沒有完成 THEN 甚至 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

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM