実行可能ファイルをサービスとして実行するには?

実行可能ファイルをサービスとして実行するには?

Ubuntu 18.04では、次の機能を使用して一部のサービスを開始または停止できます。

sudo service cron start/stop

いくつかのサービスを一覧表示できます。

service --status-all

出力は以下のファイルと一致します/etc/init.d/

サービスを管理する方法には、system V init、systemd、upstartなど、いくつかあります。どのような方法を使うべきですか?man serviceSystem V init であることを示します。ところで、Linuxではinitの代わりにsystemdを使用すると聞きました。 Ubuntuでinitの代わりにsystemdを使用する必要がありますか?

ランダム実行可能ファイル(ELFまたはシェルスクリプト)をサービスにする方法は?

実行ファイルを明示的に保護する必要がありますかsetsidhttps://stackoverflow.com/a/19235243/156458

次の投稿は私に適用されますか?

ありがとうございます。

ベストアンサー1

Ubuntu 18.04で[… ]

サービスを管理する方法には、system V init、systemd、upstartなど、いくつかあります。どのような方法を使うべきですか?

Ubuntu 18.04に付属のinitであるsystemdを使用しています。 (Ubuntu 16.04、Fedora、openSUSE、Arch Linux、RHEL 7、CentOS 7、CoreOSにもあり、これはDebian 9のデフォルトです。)

systemdが実行されていることを確認する良い方法は、コマンドを実行することですsystemctl。使用可能で実行時に出力を生成する場合、systemdを実行しているのです。

Ubuntu 18.04では、次の機能を使用して一部のサービスを開始または停止できます。

sudo service cron start/stop

いくつかのサービスを一覧表示できます。

service --status-all

一部serviceのシステムディストリビューションには、主に以前のバージョンとの互換性のためにコマンドが付属しています。systemctlサービスを管理するには、次の方法を試してください。

たとえば、

$ sudo systemctl start cron
$ sudo systemctl stop cron
$ systemctl status cron

簡単な操作ですべてのデバイスの状態を確認できます

$ systemctl

出力は以下のファイルと一致します/etc/init.d/

systemd基本単位がおよびsystemctlに保存されているので、必ずしもそうではありません。/etc/systemd/system//usr/lib/systemd/system/

systemdには、以前のSysV initスクリプトとの互換性が含まれています。systemd-sysv-ジェネレータ、 init スクリプトからコマンドを呼び出す systemd 基本サービス単位を生成するので、その下に init スクリプトがあると/etc/init.d/systemd にも存在する可能性が高くなります。

Ubuntuでinitの代わりにsystemdを使用する必要がありますか?

質問は明確ではありません。

この用語はinit通常、システムの起動時に実行される最初のプロセス(PID 1で実行されます)を指します。 systemdはPID 1で実行されるため、定義に従ってsystemdはい初期化(つまり、開始前、SysV初期化)

「SysV initの代わりにsystemdを使用する必要がありますか?」と尋ねると、すでにUbuntu 18.04を使用しているので、SysV initの代わりにsystemdを使用してください。 (そして上記のように、今日選択しているほとんどのディストリビューションは初期値としてsystemdを選択した可能性があります。)

今、あなたは「systemdを使うべきですか?」と尋ねることができます。単位変える初期化スクリプト?この質問はここで選択肢があり、両方のオプションが機能できると言うことができるので、より関連性があります。

私の提案は、基本的な動作モードであるサービス管理にsystemdユニットを使用する必要があることです。 initスクリプトを作成すると、間接的な階層が追加されます(ジェネレータがシステム単位を生成するため)。また、正しいデーモンと正しいデーモンについて心配する必要はないので、システムユニットを作成する方がinitスクリプトを書くよりも簡単です。実行する前に環境をクリーンアップしてください。なぜなら、systemdはこれをすべて行うからです。

ランダム実行可能ファイル(ELFまたはシェルスクリプト)をサービスにする方法は?

作る体系化されたサービスユニットそれのために。

例については、マニュアルページを参照してください。最も簡単な例は、サービスユニットを作成するのがいかに簡単かを示しています。

[Unit]
Description=Foo

[Service]
ExecStart=/usr/sbin/foo-daemon

[Install]
WantedBy=multi-user.target

このユニットを下に保存し、/etc/systemd/system/foo.servicesystemdを再ロードしてこのユニットファイルを読み込みます。

$ sudo systemctl daemon-reload

次のコマンドを使用してサービスを開始します。

$ sudo systemctl start foo.service

起動時に有効にします。

$ sudo systemctl enable foo.service

以下でサービスの状態を確認できます。

$ systemctl status foo.service

もちろん、systemdはサービス管理のためにより多くの作業を実行できるため、一般的なsystemdユニットはこれよりも長くなります(必ずしも複雑ではありません)。/usr/lib/systemd/system/*.service一般的なものと予想されるものについてより良いアイデアを得るには、以下でUbuntuに付属のモジュールを見つけてください。

実行ファイルを明示的に保護する必要がありますかsetsidhttps://stackoverflow.com/a/19235243/156458

いいえ!バックグラウンドで実行しないでください。プロセスグループやセッションなどについて心配しないでください。 systemdはこれらすべてを処理します。フォアグラウンドで実行するコードを書くと、systemdは残りを処理します。

(バックグラウンドで実行されているサービスがある場合はsystemdできるこれを管理するために使用しますType=forkingが、フォアグラウンドで実行すると作業がはるかに簡単なため、新しいサービスを開始する場合はそうします。 )

次の投稿は私に適用されますか?

これは、「Spring Boot」Javaフレームワークを使用するアプリケーションに関するものです。 Javaコードを書いてフレームワークを使用しない限り、これは関係ありません。 Javaコードを書く場合は、フォアグラウンドでサービスを実行してみてください。

質問は起動に関するもので、答えはSysV初期化スクリプトに関するものです。 SysV initスクリプトをsystemdと一緒に使用できますが、上記のようにsystemdユニットを直接作成する方が良いでしょう。

したがって、いいえ、それらのどれも関係がないと言いたいです。

systemdサービスユニットの詳細をご覧ください。

このサイトは素晴らしいリソースでもあるため、サービスのためのシステム単位の作成を探索しながら、これに関する追加の質問を自由に投稿してください。

おすすめ記事