Score:2

dist-upgrade จะแทนที่ไฟล์บริการหรือไม่

ธง my

ฉันเพิ่งสังเกตเห็นว่าเซิร์ฟเวอร์กำลังทำงาน apt-get update && apt-get dist-upgrade

เหนือสิ่งอื่นใด นักเทียบท่าได้รับการปรับปรุงและเริ่มต้นใหม่

อย่างไรก็ตาม ฉันสังเกตว่าการเปลี่ยนแปลงบางอย่างที่ฉันทำกับไฟล์บริการก่อนหน้านี้หายไปแล้ว ไฟล์ที่ /lib/systemd/system/docker.service ดูเหมือนว่าจะถูกรีเซ็ต

เป็นไปได้ไหม ฉันจำไม่ได้ว่าฉันวิ่ง โหลด daemon หลังจากการเปลี่ยนแปลงเหล่านี้

แก้ไข: เพื่อให้ชัดเจน: ฉันสงสัยว่าเป็น dist-อัพเกรด โดยพื้นฐานแล้วลบไฟล์บริการและแทนที่ด้วยไฟล์เริ่มต้นหรือไม่

และไม่ โหลด daemon ป้องกันนี้ในอนาคต?

แก้ไข 2: ตกลงดูเหมือนว่า sudo systemctl แก้ไข docker.service เป็นทางไปและปฏิบัติก โหลด daemon เมื่อบันทึก

muru avatar
us flag
สิ่งนี้ตอบคำถามของคุณหรือไม่ [ฉันจะลบล้างหรือกำหนดค่าบริการ systemd ได้อย่างไร](https://askubuntu.com/questions/659267/how-do-i-override-or-configure-systemd-services)
my flag
@muru ไม่ คำถามของฉันคือ "dist-upgrade บังคับแทนที่ไฟล์บริการทั้งหมดด้วยไฟล์ใหม่โดยไม่สนใจไฟล์ที่มีอยู่หรือไม่"
my flag
@muru Ah ฉันอ่านเพิ่มเติมอีกเล็กน้อยและมีรายละเอียดที่จะไม่แก้ไขไฟล์ /lib/systemd/ ใช่ มันจะเป็นอย่างนั้น
Score:9
ธง in

อย่าแก้ไขไฟล์ใน /lib/systemd/ หรือ /usr/share/systemd เนื่องจากไฟล์จะถูกเขียนทับในการอัปเดต

ให้คัดลอกไฟล์ไปที่ /etc/systemd/ และทำการเปลี่ยนแปลงที่นั่นแทน

ไดเร็กทอรี /etc/ (อย่างน้อยสำหรับ systemd) ถือเป็นที่เก็บไฟล์คอนฟิกูเรชันในเครื่อง ไดเร็กทอรี /**/systemd/ อื่นๆ ทั้งหมดถือเป็นแหล่งที่มาของไฟล์การกำหนดค่าเริ่มต้นและตัวอย่างที่ควรถูกแทนที่ในการอัปเกรดใดๆ

อีกเหตุผลหนึ่งที่ไม่แก้ไขไฟล์ปรับแต่งที่ให้มาในแพ็คเกจคือ หากคุณคัดลอกไปยัง /etc/systemd/... แล้วแก้ไขและทำผิดพลาด คุณสามารถเปรียบเทียบกับไฟล์ต้นฉบับได้เสมอ

systemctl daemon-โหลดซ้ำ ไม่ป้องกันอะไรเลย เพียงแค่บอกให้ systemd ตรวจสอบการกำหนดค่าทั้งหมดอีกครั้งและใช้สิ่งที่เปลี่ยนแปลง

bac0n avatar
cn flag
คิดว่า `/usr/local/lib/systemd/system/` ดีกว่า `/etc/systemd...` [1](https://unix.stackexchange.com/questions/224992/where-do-i- ใส่ไฟล์ systemd-unit-my)
et flag
@bac0n ตำแหน่งที่ได้รับอนุญาตจาก systemd คือ `/etc/systemd` นั่นคือสิ่งที่ `systemctl edit` ใช้
user10489 avatar
in flag
ฉันจะไม่แก้ไขใน /usr/local/lib/systemd เช่นกัน ฉันจะคัดลอกไปที่ /etc/systemd ก่อนทำการแก้ไข
bac0n avatar
cn flag
@StephenKitt สิ่งที่คุณ [แนะนำ](https://steveazz.xyz/micro/systemd-drop-in/) เป็นสิ่งที่แตกต่างไปจากเดิมอย่างสิ้นเชิงและสมควรได้รับคำตอบของตัวเอง และแม้กระทั่งเป็นคำตอบที่ต้องการ ฉันคิดว่าการคัดลอกไฟล์ไปที่ ไม่แนะนำให้ใช้ `/etc/systemd/` เช่น คุณจะสูญเสียความสามารถในการ *มาสก์* หน่วย
user10489 avatar
in flag
@bac0n: จริงๆ แล้วคุณคิดผิด คุณปิดบังหน่วย *โดย* ใส่ไฟล์เปล่าใน /etc/systemd/ โดยพื้นฐานแล้วแทนที่ค่าเริ่มต้นของระบบด้วยไฟล์เปล่า หากคุณกำลังวางไฟล์จริง (ไม่ว่างเปล่า) ไว้ที่นั่น คุณสามารถปิดใช้งานหน่วยแทนการปิดบังได้
bac0n avatar
cn flag
แต่คุณวางไฟล์ที่แก้ไขไว้ที่ไหน
user10489 avatar
in flag
ไฟล์ที่แก้ไขจะอยู่ใน /etc/systemd/system สิ่งนี้ปิดบังค่าเริ่มต้นด้วยไฟล์แทนที่ หากคุณต้องการปิดการใช้งานเครื่องชั่วคราว คุณก็ปิดการใช้งานได้เลย ไม่ต้องมาสก์
user10489 avatar
in flag
ให้เรา [ดำเนินการสนทนาต่อในการแชท](https://chat.stackexchange.com/rooms/126878/discussion-between-user10489-and-bac0n)
et flag
@ bac0n มันครอบคลุมอยู่ใน [คำตอบของ muruâ ที่นี่](https://askubuntu.com/a/659268/412264) ไม่มีประเด็นในการทำซ้ำ IMO ;-)
Score:-1
ธง cn

มีบางอย่าง ข้อเสีย ของการจัดเก็บ ไฟล์ปกติ ใน /etc/systemd/ระบบไม่ใช่เพราะ systemd เอง แต่เพราะ systemctl อาศัยอยู่ในสถานที่นี้ การวางไฟล์ทั่วไปในไดเร็กทอรีนี้จะทำให้ฟังก์ชันการทำงานของ systemctl เสียหาย ในกรณีนี้ ความสามารถในการปกปิด .service ของคุณ และไม่มีเหตุผลที่จะเชื่อได้ว่าแอปพลิเคชันอื่นๆ จะจัดการสิ่งนี้แตกต่างไปจากนี้ ตอนนี้ systemd มีชุดที่กำหนดไว้ล่วงหน้าของ เส้นทางการค้นหาหน่วยซึ่งส่วนใหญ่จะหมกมุ่นอยู่กับการ การกระจายซึ่งจะทำให้ตำแหน่งที่คุณสามารถวาง .service โดยพื้นฐานแล้วจำกัดไว้ที่ (หรืออย่างน้อยก็จนกว่าสิ่งนี้จะได้รับการแก้ไข):

/usr/local/lib/systemd/system

ทำงานได้ดีเป็นพิเศษและไม่สูญเสียฟังก์ชันการทำงาน:

# cp -a hello-world.service /usr/local/lib/systemd/system
'hello-world.service' -> '/usr/local/lib/systemd/system/hello-world.service'

# systemctl daemon-โหลดซ้ำ
# dpkg -i สวัสดี world_1.0-1_all.deb 
การเลือกแพ็คเกจ hello-world ที่ไม่ได้เลือกไว้ก่อนหน้านี้
(กำลังอ่านฐานข้อมูล ... 396452 ​​ไฟล์และไดเร็กทอรีที่ติดตั้งอยู่ในขณะนี้)
เตรียมแกะ hello-world_1.0-1_all.deb ...
เปิดกล่องสวัสดีโลก (1.0) ...
กำลังตั้งค่า สวัสดีชาวโลก (1.0) ...
สร้าง symlink /etc/systemd/system/multi-user.target.wants/hello-world.service â /usr/local/lib/systemd/system/hello-world.service

# systemctl หน้ากากสวัสดีชาวโลก
สร้าง symlink /etc/systemd/system/hello-world.service â /dev/null

ลำดับเวลาเดียวกันกับดรอปอินเช่นกัน โดยที่ / ฯลฯ มีความสำคัญเหนือกว่า /วิ่ง ซึ่งจะมีความสำคัญเหนือกว่า /lib ... และอื่นๆ ส่วนดรอปอินที่มีชื่อต่างกันจะถูกนำไปใช้ตามลำดับพจนานุกรมโดยไม่คำนึงถึงสถานที่ หากคุณมีคำสั่งที่ทับซ้อนกัน คำสั่งสุดท้ายจะมีผลเหนือกว่า:

: systemctl cat สวัสดีชาวโลก
# /lib/systemd/system/hello-world.service
[หน่วย]
คำอธิบาย=สวัสดีชาวโลก (lib)

[บริการ]
Type=วันช็อต
ExecStart=/opt/bin/hello.sh lib

[ติดตั้ง]
WantedBy=multi-user.target

# /usr/local/lib/systemd/system/hello-world.service.d/10-local.conf
[หน่วย]
Description=สวัสดีชาวโลก (ท้องถิ่น)

[บริการ]
ExecStart=
ExecStart=/opt/bin/hello.sh ในเครื่อง

# /etc/systemd/system/hello-world.service.d/override.conf
[บริการ]
ExecStart=
ExecStart=/opt/bin/hello.sh เป็นต้น

: systemctl เริ่มต้นสวัสดีชาวโลก
28 มิ.ย. 15:20:24 betazoid systemd[1]: เริ่มต้น Hello world (ท้องถิ่น)....
28 มิถุนายน 15:20:24 betazoid สวัสดี [402381]: สวัสดี ฯลฯ
28 มิ.ย. 15:20:24 betazoid systemd[1]: hello-world.service: สำเร็จ
28 มิ.ย. 15:20:24 betazoid systemd[1]: จบแล้ว Hello world (local)..
user10489 avatar
in flag
ตาม http://0pointer.de/blog/projects/three-levels-of-off systemd รองรับ "ปิดสามระดับ": บริการหยุด, บริการปิดใช้งาน, บริการปิดบัง Masked สำหรับเมื่อคุณ *ไม่เคย* ต้องการเริ่มบริการ ไม่มีเหตุผลที่จะมีไฟล์แบบกำหนดเองสำหรับบริการที่คุณไม่ต้องการเริ่ม ทางออกของคุณคือพยายามกินเค้กของมันและกินมันด้วย
user10489 avatar
in flag
ไดเร็กทอรี /usr/local/lib/systemd/system/ เป็นเป้าหมายสำหรับโปรแกรมที่ติดตั้งด้วยมือเพื่อติดตั้งบริการ แม้ว่าการอัปเกรดระบบปกติจะไม่เขียนทับสิ่งนี้ แต่การเรียกใช้ make install อีกครั้งสำหรับโปรแกรมที่มีบริการจะเขียนทับสิ่งนั้น ไดเร็กทอรีที่ถูกต้องสำหรับไฟล์บริการแบบกำหนดเองสำหรับผู้ดูแลระบบที่จะติดตั้งคือ /etc/system/systemd
bac0n avatar
cn flag
@ user10489 สร้างบริการและวางไว้ใน `/etc/systemd/system` และ `systemctl mask` your.service เกิดอะไรขึ้น?
user10489 avatar
in flag
จะเกิดอะไรขึ้นถ้าคุณพิมพ์ systemctl edit --full your.service ? นี่คือสิ่งที่ systemd ตั้งใจ
bac0n avatar
cn flag
ใช่ มันจะทำให้ปวดหัวพอๆ กัน ฉันเข้าใจได้ว่าไฟล์ต้องเริ่มต้นที่ไหนสักแห่ง ดังนั้นฉันจึงยกโทษให้พวกเขาในครั้งนี้ ;-)
user10489 avatar
in flag
มันมีแต่เรื่องน่าปวดหัวสำหรับคุณ นี่คือวิธีแก้ปัญหามาตรฐานที่คาดหวัง

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา