Red Hat 7システムの/etc/rc.d/init.d/にベンダーから提供されたスクリプトがあります。スクリプトを起動および停止できますが、systemctl
実際にはシステム単位のファイルではないようです。
このスクリプトは、起動時にシステムデバイスファイルによってマウントされるドライブに依存します。ただし、このinitスクリプトはインストールが完了する前に起動しようとするため、常に失敗します。
私はinitスクリプトの始めに、スクリプトを残りのスクリプトを実行する前に30秒間待機状態にする行を追加してハッキングを試みましたsleep 30
。
しかし、睡眠機能が常に機能するわけではありません。
完了したシステムマウントデバイスファイルに基づいてこの初期化スクリプトを作成する方法はありますか?初期化スクリプトの先頭にスリープモードを追加するよりも良い方法はありますか?ありがとうございます。
ベストアンサー1
SysV 初期化スクリプトは、systemd によって systemd 単位ファイルに自動的に変換されます。望むよりman systemd-sysv-generator
。生成されたユニットを編集して、マウントポイントに適切な依存関係を追加しようとします。ほんの数行の追加コンテンツで「埋め込み」ファイルを作成するだけです。たとえば、初期化ファイルが呼び出されると、/etc/rc.d/init.d/mysysv
生成されたユニットはmysysv.service
。次のコマンドを入力してください。
sudo systemctl edit mysysv
そして、選択したエディタの一時ファイルに配置する必要があります(環境変数EDITOR設定)。以下を含むようにファイルを編集します。
[Unit]
# default timeout of 90 secs for dir to be mounted
JobTimeoutSec=600
RequiresMountsFor=/path/to/mount
エディタをきちんと終了します。これによりファイルが生成されます/etc/systemd/system/mysysv.service.d/override.conf
。今すぐデバイスを起動すると、mysysv
この修正により、タスクは開始前にマウントポイントに何かがインストールされるまで最大600秒待機します。それ以外の場合は、タイムアウトのため失敗します。ジョブのデフォルト待機時間は、システムグローバル値である90秒です。