नोट: संक्षेप में तैयार किया गया प्रश्न नीचे पाया जा सकता है।
मेरे पास एक स्क्रिप्ट है जो बाहरी USB ड्राइव पर मेरी फ़ाइलों का बैकअप बनाती है। मेरे द्वारा बनाए गए नए डेटा की मात्रा के आधार पर, इसे निष्पादित करने में कुछ समय लग सकता है। मैं इसे सिस्टम के हर शटडाउन पर स्वचालित रूप से चलाना चाहता हूं।
मैं नवीनतम अपडेट (सिस्टमड) के साथ फेडोरा 23 का उपयोग कर रहा हूं।
मैंने इसे कई तरीकों से हासिल करने की कोशिश की, लेकिन मैं इसे काम नहीं कर पाया।
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 था, मजेदार संयोग है।
Shutdown.target से पहले
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 को अनमाउंट करता है और पाइप के बुनियादी ढांचे को निष्क्रिय करता है (एक और त्रुटि जो मुझे कभी-कभी मिली, जब अनमाउंट काफी तेज नहीं था)।
प्रश्न
मैं अपनी स्क्रिप्ट को शटडाउन पर शुरू करने के लिए पहले से कैसे सिखा सकता हूं, जब तक यह बाहर नहीं निकलता है और तब तक शटडाउन की बाकी स्क्रिप्ट / टारगेट / यूनिट / जो भी हो, उसे शुरू करना है?