Lưu ý: Câu hỏi được xây dựng ngắn gọn có thể được tìm thấy ở phía dưới.
Tôi có một tập lệnh tạo bản sao lưu các tệp của mình vào ổ USB ngoài. Việc thực hiện có thể mất một lúc, tùy thuộc vào lượng dữ liệu mới tôi đã tạo. Tôi muốn chạy nó tự động sau mỗi lần tắt hệ thống.
Tôi đang sử dụng fedora 23 với các bản cập nhật mới nhất (systemd).
Tôi đã cố gắng để đạt được điều này theo nhiều cách, nhưng tôi không thể làm cho nó hoạt động được.
Quá trình chạy dài với StopExec
dịch vụ tự động:
[Unit]
Description=Slow backup script
Requires=local-fs.target
[Service]
ExecStart=/bin/true
ExecStop=/etc/systemd/system/do_backup.sh
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multiuser.target
Tôi kích hoạt nó systemctl enable autobackup.service
và bắt đầu với systemctl start autobackup.service
.
Một phần của nhật ký khởi động của tôi ( journalctl -b-1
):
Dez 22 17:45:27 localhost systemd[1]: Unmounted /mnt/BACKUP.
Dez 22 17:45:27 localhost do_backup.sh[4296]: At subvol /home/BACKUP.2015_12_22-17_45_25
Dez 22 17:45:27 localhost do_backup.sh[4296]: ERROR: parent subvol is not reachable from inside the root subvol.
Dez 22 17:45:27 localhost do_backup.sh[4296]: At snapshot BACKUP.2015_12_22-17_45_25
Dez 22 17:45:27 localhost do_backup.sh[4296]: ERROR: failed to dump stream. Broken pipe
Dez 22 17:45:27 localhost systemd[1]: autobackup.service: Control process exited, code=exited status=1
Dez 22 17:45:27 localhost systemd[1]: Stopped Slow backup script.
Dez 22 17:45:27 localhost systemd[1]: autobackup.service: Unit entered failed state.
Lưu ý rằng tôi đã không rút ngắn bất cứ điều gì ở giữa, nó thực sự chưa được kết thúc / mnt / BACKUP ngay trước khi kịch bản bắt đầu, sự trùng hợp hài hước ..
Trước khi tắt máy.
dịch vụ tự động:
[Unit]
Description=Slow backup script
DefaultDependencies=no
Before=shutdown.target
[Service]
ExecStart=/etc/systemd/system/do_backup.sh
Type=oneshot
systemctl edit shutdown.target
[Unit]
Requires=autobackup.service
Đầu ra về cơ bản là giống nhau.
Vấn đề
Tôi nghĩ vấn đề là systemd khởi động tập lệnh của tôi song song với tất cả các tập lệnh tắt máy khác trong cả hai trường hợp, điều đó làm mất BACKUP và hủy kích hoạt cơ sở hạ tầng đường ống (một lỗi khác đôi khi tôi gặp phải, khi việc ngắt kết nối không đủ nhanh).
Câu hỏi
Làm cách nào tôi có thể dạy systemd khởi động tập lệnh của mình trước khi tắt máy, đợi cho đến khi nó thoát và sau đó bắt đầu phần còn lại của tập lệnh / mục tiêu / đơn vị / bất cứ điều gì?