2016-05-17 4 views
0

本質:システムにpythonデーモンを追加する

リモートプラットフォームでいくつかのタスクを管理するためのデーモンを作成しました。 これはpythonで書かれ、引数start、stop、およびrestartを受け付けます。 これをsystemdに追加しようとしている間に(システム起動時に起動し、シャットダウン時に停止するなど)、問題が発生しました: デーモンが動作しているようですが、実際に動作するかどうかはわかりません。再起動やエラーでステータスリターンを要求する:

[[email protected] ~]# systemctl restart mydaemon 
Failed to restart mydaemon.service: Unit mydaemon.service failed to load: No such file or directory. 

[[email protected] ~]# systemctl status mydaemon 
● mydaemon.service 
    Loaded: not-found (Reason: No such file or directory) 
    Active: inactive (dead) 

仕様:

コード自体は非常にいくつかの変更とサンダーマレシャルによりexampleよく知られている以下の。それ自体は問題なく動作し、受け入れられたすべての引数に適切に反応します。 pidは/tmp/my-daemon.pidに保存されます。 /usr/lib/systemd/user/mydaemon.service、以下のようにコードがある:

にsystemdサービスファイルは、ユーザデーモンディレクトリにある

[Unit] 
Description=The user daemon 

[Service] 
Type=forking 
ExecStart=/usr/bin/python /home/frcr/mydaemon_v01.py start 
ExecStop=/usr/bin/python /home/frcr/mydaemon_v01.py stop 
RestartSec=5 
TimeoutSec=60 
RuntimeMaxSec=infinity 
Restart=always 
PIDFile=/tmp/my-daemon.pid 


[Install] 
WantedBy=multi-user.target 

systemctlがアクティブとしてのステータスを返すが、PIDを提供する場合にのみ:

[[email protected] ~]# systemctl status 9177 
● session-481.scope - Session 481 of user user 
    Loaded: loaded 
    Drop-In: /run/systemd/system/session-481.scope.d 
      └─50-After-systemd-logind\x2eservice.conf, 50-After-systemd-user-sessions\x2eservice.conf, 50-Description.conf, 50-SendSIGHUP.conf, 50-Slice.conf 
    Active: active (running) since Tue 2016-05-17 06:24:51 EDT; 1h 43min ago 
    CGroup: /user.slice/user-0.slice/session-481.scope 
      ├─8815 sshd: [email protected]/0 
      ├─8817 -bash 
      ├─9177 python /home/user/mydaemon_v01.py start 
      └─9357 systemctl status 9177 

私はここでsimilar questionをスタックオーバーフローで見たことがありますが、私の問題の解決策がないようです。

systemdの経験がまったくないために非常に明白なものがないと思います。おかげさまで、ありがとうございました。

答えて

2

完全パス名でデーモンを有効にすると問題は解決しましたが、より良い解決策があります。

サービスはユーザディレクトリにありましたが、システムサービスとして開始されました。しかし/usr/libは新しいサービスファイルを追加するのに適切な場所ではありませんでした。このディレクトリは、オペレーティングシステムパッケージの一部として出荷されるファイル用です。新しいシステムサービスを追加する正しいディレクトリは、/etc/systemd/systemrelated docs about systemd pathsを参照してください。

さらに、起動時にサービスがロードされるようにするには、enableサービスを使用します。

+0

ありがとう、本当に役に立ちます。私は次回からドキュメントにもっと注意を払うように努めます。 –

0

いくつかの追加は、グーグル後、私は解決策を見つけた:私は実際にsystemctlにデーモンを追加するのを忘れ:

[[email protected] ~]# systemctl enable /usr/lib/systemd/user/mydaemon.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/mydaemon.service to /usr/lib/systemd/user/mydaemon.service. 
Created symlink from /etc/systemd/system/mydaemon.service to /usr/lib/systemd/user/mydaemon.service. 

絶対パスが必要であるとも言及する価値があります。

残された唯一の事はsystemctlリフレッシュすることです:サービスが追加された後

[[email protected] ~]# systemctl daemon-reload 

を、そして

[[email protected] ~]# systemctl start mydaemon 
[[email protected] ~]# systemctl restart mydaemon 
[[email protected] ~]# systemctl stop mydaemon 

すべてが完璧に動作します。

関連する問題