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.
何か不足していますか?
Ubuntu 16.04以降を使用している場合は、systemdのドキュメントで サービスファイルの作成 を確認してください。
このスクリプトは古いinitシステム用であり、レガシー互換性レイヤーによって管理されます。
私は、Ubuntu 16.04を使用しています。
最初にinit関数を変更します
. /etc/init.d/functions
に
. /lib/lsb/init-functions
次に、シェルで、/ etc/rc *からスクリプトへのシンボリックリンクを作成します。
Sudo update-rc.d <myapp> defaults 95
OK、このstackoverflow answer( 17.04でupstartスクリプトを実行していますか? )のいくつかのステップを試してみましたが、うまくいきました
まず、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
はサービスを停止します
このようなものに疲れましたか? pstartスクリプトのデバッグ方法
問題を潜在的にデバッグできるように、このガイドが提供する出力を提供できますか?
私は同じ問題を抱えていた、これは私のために働いたソリューションです。試してください:
Sudo systemctl daemon-reload
Sudo systemctl enable daemon_app.service
Sudo systemctl start daemon_app.service