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