文章を書いていますシェルスクリプト起動時にデーモンとして実行したいです。外部ツールは使用されません。デーモンツールまたは悪魔。
Linuxデーモンの作成HOWTO
~によるとLinuxデーモンの作成HOWTO、ㅏ適切デーモンプロセスには次の特徴があります。
- フォーク親プロセスで
- 閉鎖みんなファイル記述子(つまり
stdin
、、、、stdout
)stderr
- 開いている丸太書き込み用(設定されている場合)
- 変更タスクリスト継続的(通常
/
) - 初期化ファイルモードマスク(マスク)
- ユニークな作りセッションID(セキュリティ識別番号)
悪魔紹介する
これ悪魔紹介するさらに一歩進んで、一般的なデーモンは次の点を指摘しています。
- それとの関係を切る制御端子(存在する場合)すべてを無視します。端末信号
- それとの関係を切るプロセスグループ
- ハンドル
SIGCLD
一般的なLinuxツールのみを使用して、またはsh
スクリプトでdash
これらすべての操作をどのように実行できますか?bash
スクリプトは、追加のソフトウェアなしでできるだけ多くのディストリビューションで実行できる必要があります。ダーバン私たちの主な焦点です。
メモ:オンラインに多くの答えがあることを知っています。スタック交換nohup
ネットワークでは、または使用をお勧めしsetsid
ますが、これらの方法のいずれも上記の要件をすべて満たすことはできません。
編集する:これDaemon(7) マンページSysV
古いスタイルデーモンと新しいスタイルsystemd
デーモンとの間にわずかな違いがあるように見えますが、いくつかのガイドラインもあります。さまざまなディストリビューションとの互換性が重要であるため、回答の違いを明確に説明する必要があります。
ベストアンサー1
使用システム単純なユニットを作成してスクリプトをデーモンとして実行できる必要があります。いろいろあるオプション追加できますが、これは非常に簡単です。
スクリプトがあるとしましょう/usr/bin/mydaemon
。
#!/bin/sh
while true; do
date;
sleep 60;
done
忘れないでくださいsudo chmod +x /usr/bin/mydaemon
。
単位を作成します/etc/systemd/system/mydaemon.service
。
[Unit]
Description=My daemon
[Service]
ExecStart=/usr/bin/mydaemon
Restart=on-failure
[Install]
WantedBy=multi-user.target
デーモンプロセス実行開始
systemctl start mydaemon.service
起動時に起動するには有効にしてください。
systemctl enable mydaemon.service
もしsystemdベースのシステム(今日のほとんどのLinuxディストリビューションの場合と同様)では、これは実際には外部ツールではありません。欠点は、どこでも動作しないことです。