init.dスクリプトを実行する前に、systemdサービスを開始する必要があります。

init.dスクリプトを実行する前に、systemdサービスを開始する必要があります。

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秒です。

答え2

これは単純なテンプレートシステムファイルです。

#!/bin/bash

[Unit]
Description=license administration
After=default.target

[Service]
Type=idle
ExecStart=/root/scripts/administration.sh
TimeoutStartSec=0

[Install]
WantedBy=default.target
  • my_administration.serviceたとえば、上記の名前を指定した場合
  • それを置く/etc/systemd/system/
  • root.root許可を受けて-rw-r--r--
  • それからsystemctl daemon-reload
  • 次に a を実行すると、リストがsystemctl list-unit-files表示されます。my_administration.service
  • 何かを作るsystemctl enable my_administration
  • 起動後に上記の構文が与えられると、ランレベルに達するとファイルが/root/scripts/administration.sh実行されます。私の場合はgraphic.targetです。default.targetsystemctl get-default
  • 私のadministration.shファイルには権限がroot.rootあり、-rwx------実行可能である必要があります。確かに私はこのファイルを手動で作成しました。 Linuxが完全に起動した後にいくつかのタスクを実行するために作成された小さなカスタムスクリプト。

参照用に他のシステムサービスファイルを確認してください。

Redhatシステム管理者ガイド、第10章を参照してください。 systemdを使用したサービス管理

あなたは活用したい

[Unit]
Before=
Wants=
After=
Requires=

ExecStart=特定の時間にファイルに何が起こっても、他のサービスが開始される前や一部のサービスが開始された後は明らかに発生します。これら4つだけでなく、あなたが望むものを実現するために使用する必要があるシステム管理者ガイドで探すべき他の多くのものがあり、これら4つは最も一般的に使用されています。

ここでは、参照用にすべてのサービスファイルを見つけることができます/usr/lib/systemd/system/

また確認してください:https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files

返品:スクリプトで次のことを行うこともできます。

if mountpoint -q /bkup ;then /usr/bin/rsnapshot daily; fi

私の家/etc/crontabでは、以下を実行して毎日バックアップを実行します。スナップ写真mountpoint -qまず、10TBのバックアップがマウントされていることを確認し、ルートパーティションのアンマウントされたフォルダにバックアップして、システムがクラッシュしていないことを確認するために、次の手順を実行しました。

関連情報