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.target
systemctl 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のバックアップがマウントされていることを確認し、ルートパーティションのアンマウントされたフォルダにバックアップして、システムがクラッシュしていないことを確認するために、次の手順を実行しました。