GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu – Ubuntu 16.04でユニットファイルを作成しますか?

このユニットファイルを/lib/systemd/system/menu-core-prices-update.serviceに作成しました :

[Unit]
Description = core-price-update daemon
After network.target = auditd.service

[Service]
Type = forking
ExecStart = /usr/local/bin/start-menu-core-prices-update.sh
ExecStop =  /usr/local/bin/stop-menu-core-prices-update.sh
ExecReload = /usr/local/bin/reload-stop-menu-core-prices-update.sh

[Install]
WantedBy = multi-user.target

コマンドラインから実行できます:

$ /usr/local/bin/start-menu-core-prices-update.sh

プログラムは正しく起動します。しかし、デーモンを起動した場合:

$ sudo systemctl start menu-core-prices-update.service

このエラーが発生します:

Jul 24 21:10:20 localhost systemd[13655]: menu-core-prices-update.service: Failed at step EXEC spawning /usr/local/bin/start-menu-core-prices-update.sh: Exec format error
-- Subject: Process /usr/local/bin/start-menu-core-prices-update.sh could not be executed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- The process /usr/local/bin/start-menu-core-prices-update.sh could not be executed and failed.
-- 
-- The error number returned by this process is 8.
Jul 24 21:10:20 localhost systemd[1]: menu-core-prices-update.service: Control process exited, code=exited status=203
Jul 24 21:10:20 localhost systemd[1]: Failed to start core-price-update daemon.
-- Subject: Unit menu-core-prices-update.service has failed

権限:

-rwxr-xr-x 1 root root 87 Jul 24 20:27 /usr/local/bin/start-menu-core-prices-update.sh

承認された回答:

問題#1

このスレッドのタイトルは次のとおりです。[解決済み]カスタムスクリプトをsystemdに追加します。これは、上記の出力と同じエラー、主にこのビットです:

ステップEXECスポーンで失敗しました/usr/local/bin/start-menu-core-prices-update.sh:Execフォーマットエラー

このエラーは通常、スクリプトに次の問題が1つ以上あることを意味します。

  • 実行可能ではありません
  • シバンがありません(#!/bin/bash

これらに対処するには、スクリプトが実行可能であることを確認してください。

$ chmod a+x /usr/local/bin/start-menu-core-prices-update.sh

そして、必ずシバン、#!/bin/bashを追加してください トップに。

問題#2

この行にタイプミスがあるようです:

After network.target = auditd.service

これはおそらくこれであるはずです:

After=network.target auditd.service

問題#3

Type = forkingを使用している理由がわかりません 。このタイプを使用すると、ExecStart=になります fork()を呼び出すメソッドを使用する必要があります 。また、PIDFile=を使用していると想定しています。 オプション。

あなたのJavaアプリケーションはどちらのsimpleでもうまく動作すると思います またはoneshot 。詳細については、「systemdスクリプトでのフォーク」というタイトルのこのU&L Q&Aを参照してください。


Ubuntu
  1. Ubuntuでファイルを見つける方法は?

  2. Ubuntuで.exeファイルを実行する方法は??

  3. Windows7でUbuntu11.04ファイルにアクセスする方法は??

  1. Ubuntu Phoneをバックアップする方法は?

  2. Ubuntu のパッケージに含まれるファイルを見つける

  3. 配布する Ubuntu VM の作成

  1. Ubuntuでunrarする方法

  2. Nexus7を接続してファイルを転送する方法は??

  3. Ubuntuで不要なReadme.md〜を作成していますか?