2

ユーザーからサービスとして開始/停止できるスクリプトを perl で作成しましたDaemon::Controlが、再起動時にこれを実行したいと考えています。ユーザーとして実行するとすべて問題ありませんが、ルートとして実行すると失敗します

Can't locate Mojo/Server/Morbo.pm in @INC

service appname startを指定してコマンドを実行すると、正常に動作します。root には基本的な perl インストールがあり、ユーザーにはすべての正しいモジュールを含む perlbrew インストールがあります。

Daemon::Control「user」と「group」を指定した場合、ユーザーとして実行しないでください。環境変数をセットアップするために、ユーザーの .bashrc ファイルに init_config も指定しました。

use warnings;
use strict;
use Daemon::Control;

use Cwd qw(abs_path);

Daemon::Control->new(
    {   name        => "appname",
        lsb_start   => '$syslog $remote_fs',
        lsb_stop    => '$syslog',
        lsb_sdesc   => 'appname startup Short',
        lsb_desc    => 'Morbo , bit lighter than hypnotoad.',
        init_config => "/home/mojouser/.bashrc",
        path        => abs_path($0),

        program => '/home/mojouser/perl5/perlbrew/perls/perl-5.18.1/bin/morbo',

        program_args => [
            '-l', "http://*:3000", '-w', '/home/mojouser/apps/appname/lib',
            '-w',
            '/home/mojouser/apps/appname/templates',
            '/home/mojouser/apps/appname/script/app'
        ],

        user  => 'mojouser',
        group => 'mojouser',

        pid_file    => '/tmp/mojouser_appname.pid',
        stderr_file => '/tmp/mojouser_appname.err',
        stdout_file => '/tmp/mojouser_appname.out',

        fork => 2,
    }
)->run;
4

2 に答える 2

0

多くの場合、ユーザーとしての環境変数は、一部のサブプロセスを適切に実行するために必要な環境変数を保持しますが、ルートの環境変数にはほとんど含まれていません。$ENV{whatever} = 'something'; でこれを解決しました。Daemon::Control->プログラムで。代わりに /etc/init.d/program で行うことを推奨する人もいます。FWIW

于 2015-06-04T17:37:47.187 に答える