mountコマンド後にsystemdサービスを開始する方法

mountコマンド後にsystemdサービスを開始する方法

私はLinuxコースの練習をしており、先生はSystemdについて教えています。

以下を使用して、特定のデバイスがインストールされたときにスクリプトを開始するサービスを作成するには: mount /dev/xvdc1 /mnt/backup

私が試したこと

  1. タイマーを使用して/mnt/backupマウントポイントであることを確認します。 (先生はそれを受け入れません。それは厳密にイベント中心でなければなりません)
  2. .mount 単位を作成し、.service 単位に .mount 単位が必要になります。このアプローチは、コマンドの実行時にスクリプトを起動しません。mount /dev/xvdc1 /mnt/backup

私はこれに間違った方法で近づいていると思います。これはラボの問題です。

/mnt/backup 「一度インストールしたら、rsyncを使用してすべてのファイルをコピーするユニットファイルを作成します/dev/xvdc1。」

知っている:

  1. 設置する機器は常に/dev/xvdc1
  2. デバイスのマウントポイントは常に/mnt/backup
  3. /dev/xvdc1マウントされたベースでサービスを開始する必要があります。

これは私の.serviceユニットファイルです。

[Unit]
Description=Starts a backup for /dev/xvdc1 when mounted using the mount command.

[Service]
Type=simple
ExecStart=/root/backupscript.sh
ExecStop=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

答え1

システム装置起動条件

デバイスを起動する前に、ConditionPathExists =を使用してファイルの存在条件を確認してください。指定された絶対パス名がない場合、条件は失敗します。 ConditionPathExists =に渡された絶対パス名の前に感嘆符( "!")が付いていると、テストは無効になり、パスが存在しない場合にのみデバイスが起動します。

ConditionPathIsMountPoint = ConditionPathExists =に似ていますが、パスが存在し、マウントポイントであることを確認してください。

最も簡単な方法は次のようなものです。

ConditionPathIsMountPoint=/mnt/backup

あなた[Unit]の側から。これは確認されませんが、どのバックアップの作成に関してユーザーは面倒ではないかもしれませんが、デバイスはここにインストールされます。

Restart=on-failureサービスの開始を続行しなければならない場合があります。


より正確なアプローチは、udev特定のデバイスがインストールされたときにサービスを開始するルールを作成することです。

参考

まず、lsusbでデバイスを見つけます。 IDを書き留めます(例:0a81:0101)

sudoedit /etc/udev/rules.d/100-mount-videos.rules を介して /etc/udev/rules.d/ に新しい udev ルールファイルを作成し、次のように新しいルールを追加します。

ACTION=="追加",ATTRS{idVendor}=="0a81",ATTRS{idProduct}=="0101",RUN+="/home/your_username/bin/mount_videos.sh"

または、あなたが言う他のサービスRUN+=に置き換えることができます。RUN+=/usr/bin/systemctl start backup.service

関連情報