注:簡単に作成された質問は、下部にあります。
外部USBドライブにファイルのバックアップを作成するスクリプトがあります。作成した新しいデータの量によっては、実行に時間がかかる場合があります。システムをシャットダウンするたびに自動的に実行したい。
最新の更新(systemd)でfedora 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をアンマウントし、パイプインフラストラクチャを無効にします(アンマウントが十分に速くなかったときに時々別のエラーが発生しました)。
質問
シャットダウン時に最初にスクリプトを開始し、終了するまで待ってから、残りのシャットダウンスクリプト/ターゲット/ユニット/その他を開始するようにsystemdに教えるにはどうすればよいですか?