หมายเหตุ: คำถามที่กำหนดสูตรสั้น ๆ สามารถพบได้ที่ด้านล่าง
ฉันมีสคริปต์ที่ทำให้การสำรองไฟล์ของฉันไปยังไดรฟ์ USB ภายนอก การดำเนินการอาจใช้เวลาสักครู่ขึ้นอยู่กับปริมาณข้อมูลใหม่ที่ฉันสร้างขึ้น ฉันต้องการเรียกใช้โดยอัตโนมัติทุกครั้งที่ปิดระบบ
ฉันใช้ fedora 23 พร้อมอัปเดตล่าสุด (systemd)
ฉันพยายามทำสิ่งนี้ให้สำเร็จในหลาย ๆ ทาง แต่ฉันไม่สามารถทำงานได้
กระบวนการทำงานที่ยาวนานด้วย StopExec
autobackup.service:
[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
ฉันเปิดใช้งานด้วยและเริ่มด้วยsystemctl enable autobackup.service
systemctl start autobackup.service
ส่วนหนึ่งของบันทึกการบูตของฉัน ( 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.
โปรดทราบว่าฉันไม่ได้ตัดทอนสิ่งใดระหว่างนั้นจริง ๆ ก็ไม่ได้เมานท์ / mnt / BACKUP ก่อนที่สคริปต์จะเริ่ม
ก่อนปิดเครื่องเป้าหมาย
autobackup.service:
[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
เอาต์พุตนั้นเป็นพื้นเดียวกัน
ปัญหา
ฉันคิดว่าปัญหาคือ systemd เริ่มต้นสคริปต์ของฉันควบคู่ไปกับสคริปต์การปิดระบบอื่น ๆ ทั้งสองกรณีซึ่งยกเลิกการต่อเชื่อม BACKUP และปิดการใช้งานโครงสร้างพื้นฐานของท่อ (ข้อผิดพลาดอื่นที่ฉันได้รับในบางครั้ง
คำถาม
ฉันจะสอน systemd ให้เริ่มสคริปต์ของฉันก่อนที่จะปิดเครื่องรอจนกว่าจะออกจากนั้นเริ่มสคริปต์การปิดระบบ / เป้าหมาย / หน่วยอื่น ๆ ที่เหลือได้อย่างไร