หยุดบริการ systemd เมื่อเริ่มต้นอีก


3

ฉันเขียนไฟล์ zram.service ง่ายๆที่จะตั้งค่าพื้นที่สว็อปบีบอัดสำหรับฉันเพื่อหลีกเลี่ยงการเคี้ยวดิสก์ของฉัน Zram มีลำดับความสำคัญสูงกว่าอุปกรณ์แลกเปลี่ยนอื่น ๆ

ปัญหาคือเมื่อฉันพยายามจำศีลระบบของฉันมันจะเขียนสถานะของระบบเพื่อสลับซึ่งในกรณีนี้คือ zram และเนื่องจากเนื้อหาของหน่วยความจำหายไปเมื่อไฟฟ้าหายไปแน่นอนไม่ทำงาน

วิธีแก้ปัญหาคือหยุด zram.service ของฉันก่อนที่จะเรียกใช้ systemctl hibernate และเริ่มอีกครั้งเมื่อระบบสำรอง

เท่าที่ฉันได้พบว่า systemctl hibernate เริ่มต้น /lib/systemd/system/systemd-hibernate.service ฉันได้คัดลอกบริการนี้ไปยัง / etc / systemd / system / เพื่อแทนที่และฉันสามารถใช้งานได้โดยใช้ 'ExecStartPost =' stanza แต่ฉันคิดว่าต้องมีวิธีที่ดีกว่าในการหยุดบริการ systemd เมื่อบริการอื่น เริ่มต้นและกลับกัน

แก้ไข: บริการ zram ที่ใช้งานได้บนระบบ Debian สำหรับผู้ที่สนใจ

[Unit]
Description=ZRAM swap
Conflicts=hibernate.service

[Service]
Environment=ZRAM_MEM=1G
Environment=ZRAM_CMPALGO=lz4
Environment=ZRAM_CMPSTREAMS=2


Type=oneshot
User=root
ExecStartPre=/bin/sh -c "/sbin/modprobe zram num_devices=1"
ExecStartPre=/bin/sh -c "echo $ZRAM_CMPALGO >/sys/block/zram0/comp_algorithm"
ExecStartPre=/bin/sh -c "echo $ZRAM_CMPSTREAMS >/sys/block/zram0/max_comp_streams"
ExecStartPre=/bin/sh -c "echo $ZRAM_MEM > /sys/block/zram0/disksize"
ExecStartPre=/bin/sh -c "/sbin/mkswap /dev/zram0"
ExecStart=/sbin/swapon /dev/zram0 -p 10

ExecStop=/sbin/swapoff /dev/zram0
ExecStop=/bin/echo 1 > /sys/block/zram0/reset
ExecStop=/sbin/rmmod zram

RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

คำตอบ:


3

กำหนด Conflicts= ในไฟล์ systemd unit

จาก systemd.unit manpage:

ความขัดแย้ง =

รายการชื่อยูนิตที่คั่นด้วยช่องว่าง กำหนดค่าการพึ่งพาข้อกำหนดเชิงลบ หากหน่วยมีการตั้งค่า Conflicts = ในหน่วยอื่นการเริ่มต้นก่อนจะหยุดหลังและในทางกลับกัน โปรดทราบว่าการตั้งค่านี้เป็นอิสระจากกันและตั้งฉากกับการติดตามหลัง = และก่อน = การสั่งซื้อ

หากหน่วย A ที่ขัดแย้งกับหน่วย B ถูกกำหนดให้เริ่มในเวลาเดียวกันกับ B ธุรกรรมจะล้มเหลว (ในกรณีที่จำเป็นต้องเป็นส่วนหนึ่งของธุรกรรม) หรือถูกแก้ไขเพื่อแก้ไข งานไม่ใช่ส่วนหนึ่งของธุรกรรม) ในกรณีหลังงานที่ไม่จำเป็นต้องถูกลบออกหรือในกรณีที่ไม่จำเป็นต้องใช้ทั้งคู่หน่วยที่มีข้อขัดแย้งจะเริ่มขึ้นและหน่วยที่มีข้อขัดแย้งจะหยุดทำงาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.