2016-03-31 17 views
1

私はYocto互換ファイルシステムを組み込みターゲットで使用して、システム起動時に起動するサーバーを用意しています。ファイルシステムは、そのサービスシステムにsystemdを使用します。ブート時の実行のためにsystemdユニットテンプレートを有効にするには?

私のサーバーはsystemdテンプレートユニットファイルを使用していますが、私はそれを有効にすることに問題があります。このテンプレートを使用して、サーバーが使用するsqliteデータベースファイルの絶対パス名を指定します。

/lib/systemd/system/[email protected] 

その内容:テンプレートユニットファイルの名前は

[Unit] 
    Description=Data Server application (with DB=%I) 
    After=syslog.target 
[Service] 
    Type=simple 
    ExecStart=/opt/ndc/DataServer --DEBUG --databaseFile=%I 
    Restart=always 
    RestartSec=2 
[Install] 
    WantedBy=multi-user.target 

データベースファイルが/var/lib/ndc/DataServer.DBであるが、私は/ libにシンボリックリンクを作成/ systemdに/システム:私は実行

# ln -s [email protected] [email protected] 

# systemctl start [email protected] 

サーバーは正しいパラメータで起動し、データベースを見つけて、期待どおりにバックグラウンドで実行します。だから私はそれは、システムのブート時間中にサービスを開始するようにサービステンプレートを有効にしてみました:表面に

# systemctl enable [email protected] 
    ln -s '/lib/systemd/system/[email protected]''/etc/systemd/system/multi-user.target.wants/[email protected]' 

# systemctl enable [email protected] 
    Failed to execute operation: No such file or directory 

ことができなかったので、私は、テンプレートファイル自体を有効にしようとしましたシステムは満足しているようですが、起動時にsystemdはTDI_DataServerの起動を正しく実行しません。ユニットファイルに "マルチユーザ"パラメータ(おそらくユニットファイルのWantedByターゲットから?)を供給しているようです。ここで

はsystemctlステータスです:

$ systemctl status -l TDI* 
    ● [email protected] - Data Server application (with DB=multi/user) 
     Loaded: loaded (/lib/systemd/system/[email protected]; enabled) 
     Active: activating (auto-restart) (Result: signal) since Sat 2000-02-05 20:41:05 UTC; 1s ago 
     Process: 2951 ExecStart=/opt/ndc/DataServer --DEBUG --databaseFile=%I (code=killed, signal=ABRT) 
    Main PID: 2951 (code=killed, signal=ABRT) 

    Feb 05 20:41:05 mityomapl138 DataServer[2951]: [949783265:2047] NOTICE: per-conn mem: 136 + 2140 headers + protocol rx buf 
    Feb 05 20:41:05 mityomapl138 DataServer[2951]: [949783265:2056] NOTICE: Listening on port 4243 
    Feb 05 20:41:05 mityomapl138 systemd[1]: [email protected]: main process exited, code=killed, status=6/ABRT 
    Feb 05 20:41:05 mityomapl138 systemd[1]: Unit [email protected] entered failed state. 
    Feb 05 20:41:05 mityomapl138 DataServer[2951]: 2000:02:05 20:41:05: WSServer connected on socket tcp://localhost:5556 
    Feb 05 20:41:05 mityomapl138 DataServer[2951]: 2000:02:05 20:41:05: bound to socket inproc://clients 
    Feb 05 20:41:05 mityomapl138 DataServer[2951]: 2000:02:05 20:41:05: DatabaseWorker using database multi/user 
    Feb 05 20:41:05 mityomapl138 DataServer[2951]: unable to open database file 
    Feb 05 20:41:05 mityomapl138 DataServer[2951]: terminate called after throwing an instance of 'SQLite::Exception' 
    Feb 05 20:41:05 mityomapl138 DataServer[2951]: what(): unable to open database file 

● TDI_DataServer.service 
     Loaded: loaded (/etc/init.d/TDI_DataServer) 
     Active: inactive (dead) 

私は何かが足りないのですか?どんな助けでも大歓迎です。代わりに

# systemctl enable [email protected] 

+0

注:自分自身のシンボリックリンクを/etc/systemd/system/multi-user.target.wantsディレクトリの "TDI_DataServer @ - var-lib-ndc-DataServer.DB.service "、すべて正常に動作します。それはちょうど "systemctl enable"が私のためにそれをすることになっていることです – f1fan44

答えて

2

ユニットファイルに供給された%Iパラメータのsystemctl解析には本当にバグがあるようです。上述したように、次のコマンドは失敗します。

# systemctl enable [email protected] 

をしかし、私はは/ var/libに/ NDC「DataServer.DB」から「DataServer.db」(すなわち小文字我々のデータベースファイルの名前を変更した場合ドット、後)と私は、次のコマンドを発行します。

# systemctl enable [email protected] 

...すべてが正常に動作します。シンボリックリンクは/etc/systemd/system/multi-user.target.wantsに作成され、システムの次の再起動時に、DataServerサービスがデータベースを見つけて楽しく実行します。

私は、これについて私たちのサードパーティのファイルシステムプロバイダに通知しました。それはおそらく、Yoctoの人とsystemdの保守者が興味を持っているかもしれません。

+0

ここで問題の一部は、問題のシステムの年齢だと思います。あなたの例はFedora 23のインストール時にローカルで動作しましたが、Yocto/Daisy(1.6.3)はかなり古く、システムサポートはかなり古くなっています。おそらくこの特定の問題に対する最良の解決策になります。 –

0

は、私が現在にsystemdがいずれかのサポートされていることを知っているが、私はいくつかの点であなたは.service部に明示しなければならなかったことを推測していると、それが何

# systemctl enable [email protected] 

を試してみてくださいあなたはここに走っています。ファイルシステムがYoctoバージョンに基づいているとすれば、ここで助けてくれます、ありがとう!

+0

私はすでに ".service"をユニット名に追加しようとしましたが、 "操作を実行できませんでした:そのようなファイルやディレクトリはありません" 私はファイルシステムを第三者から入手します - 私はYoctoバージョンに基づいています。 – f1fan44

+0

ファイルシステムはYocto poky daisy(1.6.3)に基づいています。 – f1fan44

関連する問題