web-dev-qa-db-ja.com

<myapp> .serviceの開始に失敗しました:ユニット<myapp> .serviceが見つかりません

pythonボット用の超基本的なinit.dスクリプトを作成しました。

#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....

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

start() {
    echo "starting torbot"
    python /home/ctote/dev/slackbots/torbot/torbot.py
    # example: daemon program_name &
}

stop() {
    # code to stop app comes here
    # example: killproc program_name
}

case "$1" in
    start)
       start
       ;;
    stop)
       stop
       ;;
    restart)
       stop
       start
       ;;
    status)
       # code to check status of app comes here
       # example: status program_name
       ;;
    *)
       echo "Usage: $0 {start|stop|status|restart}"
esac

そして、torbot.pyを上部の+xおよび#!/usr/local/bin/pythonに設定しました。実際に起動しようとすると、次のようになります:

:/var/lock/subsys$ Sudo service torbot start Failed to start torbot.service: Unit torbot.service not found.

何か不足していますか?

12
ctote

Ubuntu 16.04以降を使用している場合は、systemdのドキュメントで サービスファイルの作成 を確認してください。

このスクリプトは古いinitシステム用であり、レガシー互換性レイヤーによって管理されます。

4
theist

私は、Ubuntu 16.04を使用しています。

最初にinit関数を変更します

. /etc/init.d/functions

. /lib/lsb/init-functions

次に、シェルで、/ etc/rc *からスクリプトへのシンボリックリンクを作成します。

Sudo update-rc.d <myapp> defaults 95
2
Leon Wolf

OK、このstackoverflow answer( 17.04でupstartスクリプトを実行していますか? )のいくつかのステップを試してみましたが、うまくいきました

  1. 17.10のUbuntu
  2. Gunicorn 19.xサーバーにpythonアプリがあります。このアプリケーションをサービスとして起動する必要があります。

まず、foo.serviceファイルを作成する必要があります。

[Unit] 
Description=FooServer 

[Service] 
Restart=on-failure
WorkingDirectory=/path/to/your/working/directory/where the foo lives
ExecStart=/what/process/will call foo eg: in my case I used gunicorn app:app
ExecReload=/bin/kill -HUP $MAINPID 
KillSignal=SIGINT 

[Install] 
WantedBy=multi-user.target

「=」記号の左側にあるすべての単語の意味と(以前の)upstartの同等の用語は、リンクにあります https://wiki.ubuntu.com/SystemdForUpstartUsers

ファイルの準備ができたら、「foo.service」という名前を付けましょう(.service拡張子が重要です)

ファイルを/lib/systemd/systemに配置する必要があります

その後、呼び出してサービスを有効にする必要があります

systemctl enable foo

シンボリックリンクを作成するため、rootパスワードを入力するよう求められます。

あなたが手間をかけずにここまで到達した場合、あなたは良いです。したがって、サービスは作成されます。

Sudo service foo start

systemctl status fooはステータスを表示しますSudo service foo stopはサービスを停止します

1
siddharthrc

このようなものに疲れましたか? pstartスクリプトのデバッグ方法

問題を潜在的にデバッグできるように、このガイドが提供する出力を提供できますか?

0
The Cleric

私は同じ問題を抱えていた、これは私のために働いたソリューションです。試してください:

Sudo systemctl daemon-reload

Sudo systemctl enable daemon_app.service

Sudo systemctl start daemon_app.service

0
Erol Kalkan