2015-03-18 55 views
1

我想在我的centos機器上運行一個ruby腳本作爲服務。我可以直接從命令行和bash文件直接運行ruby腳本,沒有問題。`require':無法加載這樣的文件 - 從bash腳本運行ruby

但是,當我嘗試通過/etc/init.d將其作爲服務運行時,出現錯誤'require': cannot load such file - somegem。

#! /home/user/.rvm/rubies/ruby-2.1.5/bin/ruby 
# encoding: utf-8 

require "somegem" 

我已經創建了一個init.d下的腳本,並放置在/etc/init.d/boot.d中

#!/bin/sh 
# monitor_endpoint 
# chkconfig: 2345 20 80 

# Source function library. 
. /etc/rc.d/init.d/functions 

#Define variables 
prog="monitor_endpoint" 
exec=/home/user/Workspaces/test/bin/test.rb 
echo $exec 

start() { 
    echo -n $"Starting $prog: " 
    # use daemon to start the service 
    daemon $exec & 
    retval=$? 
    echo 
    return $retval 
} 

etc... 

這跟我的寶石的安裝路徑的問題嗎?

任何幫助將不勝感激,因爲這是我第一次嘗試以這種方式運行ruby腳本。謝謝。

+1

是當它通過後臺程序運行下運行什麼帳戶的腳本?也許在腳本的開頭輸出'whoami'來檢查? – Beartech 2015-03-19 02:36:56

+0

whoami在init.d腳本中返回根目錄。爲什麼這會表現得很差,我能做些什麼來彌補這一點? – CatsLoveJazz 2015-03-19 08:12:54

回答

1

問題出在您的環境中(環境變量)。 運行

env 
在正常的環境和從啓動腳本,並管道運行它的輸出到文件後

看看差異。

要猜你是丟失了所有的紅寶石具體的東西(GEM_PATH和所有)

+0

你是對的,env顯示我沒有路徑中的紅寶石或寶石。我在這裏有什麼選擇?如何將這些添加到根路徑或反過來作爲當前用戶運行腳本?我的目標是擁有一個透明的服務,可以讓任何人登錄。 – CatsLoveJazz 2015-03-19 09:59:13

+0

您可以以root身份登錄並安裝所需的寶石。通常情況下,人們會遇到問題,因爲他們的做法相反,他們以root或者'sudo'的方式安裝他們的ruby文件,然後在他們的配置文件下找不到它。你想給根配置文件它需要運行的寶石。你是否在使用類似rbenv或rvm的東西? – Beartech 2015-03-19 16:02:35

+0

一種選擇是在運行命令之前設置路徑。複製正常env中的路徑並設置導出。如果您沒有正確安裝路徑,以根用戶身份安裝gem將無濟於事。另一個選擇是在執行前輸入rvm或rbenv(或者你正在使用的任何東西)。 – Mircea 2015-03-19 16:25:07

相關問題