知道systemd的人可以帮我弄清楚我做错了什么吗?
我正在尝试使用 systemd 触发一个脚本,该脚本将在用户关闭计算机时将文件从用户 (mardi) 的主目录同步(备份)到第二个驱动器。我希望它只在关机时发生,但如果太复杂,那么它可能在关机或重启时发生;我同意。(我知道这不是一个特别好的备份策略,但它是整个过程中的第一步,所以请不要就这样做的不可取性提供反馈;我想这样做,我想学习如何正确使用 systemd 所以请提供有帮助的反馈)
我正在运行 Linux Mint 18 - 基于 Ubuntu 16.04 - 如果这对答案有影响的话。
我已经在下面包含了我所做的事情,这是阅读 systemd 手册页和此处和其他地方的多个(通常是冲突的)论坛页面的结果,但我没有让它工作。
我已经测试了 bash 脚本,当它运行时,它会执行我想要的操作。
我通过运行 systemctl stop mardibackup.service 手动停止了 mardibackup.service,它可以满足我的要求。
所以我希望我没有正确定义单元或正确调用服务,但我不知道该怎么做。
具体问题:
1)为什么在触发ExecStop停止时使用multi-user.target并调用服务?为什么不直接使用 shutdown.target 并在触发 ExecStart 时调用该服务?
2) ExecStart=/bin/true 应该做什么?它似乎没有做任何事情,但它在许多推荐的答案中。
帮助??谢谢你。
所以,这就是我所做的:
1)创建以下脚本,使用 Lucky Backup 生成 rsync 命令并将其放入 /home/mardi/Templates/backupmardi.sh (当我从命令行手动执行时,这是有效的)
#!/bin/bash
# This program synchronizes the contents of mardi home directory
# to the archives disk in /backups/mardi
#
# It checks if a current version of a file is already copied and if so, does not change anything
# If a file is deleted in the home directory, it is NOT deleted from the archives
rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after /home/mardi /mnt/7b2152a9-af3c-4f63-9287-98aacd9cb8ff/backups/
2)更改脚本文件的权限,使其可执行
chmod +x /home/mardi/Templates/backupmardi.sh
3)创建以下关闭/重启服务来调用备份脚本并放入/etc/systemd/system/mardibackup.service(如果我通过systemctl stop mardibackup.service手动“停止”它,这就是我想要的)
[Unit]
Description=Backup Mardi home dir to archives
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/bin/bash /home/mardi/Templates/backupmardi.sh
[Install]
WantedBy=multi-user.target
4) 创建将在系统关闭/重新启动时调用关闭/重新启动脚本的符号链接
systemctl enable /etc/systemd/system/mardibackup.service
(Note if you ever want to remove the symlink, enter: systemctl disable mardibackup.service)
systemctl start mardibackup.service
5)关闭系统(我尝试了多次关闭但它没有调用备份脚本backupmardi.sh)
有人有一些想法吗?