Lol*_*ans 7 centos systemd services
我正在为我的 linux 课程创建一个实验室,老师正在教我们有关 Systemd 的知识。
如何使用以下命令创建在安装特定设备时启动脚本的服务: mount /dev/xvdc1 /mnt/backup
我试过的
/mnt/backup
是挂载点。(老师不会接受它。它必须是严格的事件驱动)mount /dev/xvdc1 /mnt/backup
我想我可能以错误的方式处理这个问题。这是实验室的问题。
“创建一个单元文件,在安装后
/mnt/backup
立即使用 rsync复制所有文件/dev/xvdc1
。”
我知道的:
/dev/xvdc1
/mnt/backup
/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
Run Code Online (Sandbox Code Playgroud)
使用 ConditionPathExists= 在启动单元之前检查文件存在条件。如果指定的绝对路径名不存在,则条件将失败。如果传递给 ConditionPathExists= 的绝对路径名带有感叹号(“!”)前缀,则测试将被否定,并且仅当路径不存在时才启动单元。
ConditionPathIsMountPoint= 与 ConditionPathExists= 类似,但验证某个路径是否存在并且是挂载点。
似乎最简单的方法是包括
ConditionPathIsMountPoint=/mnt/backup
Run Code Online (Sandbox Code Playgroud)
在你的[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
或任何您所说的服务