Score:2

ตัวจับเวลาไม่เริ่มทำงานโดยคำสั่ง userdata หลังจากรีบูต

ธง co

คำอธิบายปัญหา:

เมื่อบู๊ตเครื่อง เราทริกเกอร์สคริปต์การเริ่มต้นบริการที่แสดงด้านล่าง สคริปต์เป็นส่วนหนึ่งของอินสแตนซ์ ข้อมูลผู้ใช้.

สคริปต์นี้คัดลอกบริการ/ตัวจับเวลาที่จำเป็นไปยัง ระบบ โฟลเดอร์และเริ่มจับเวลา

ในบางครั้งหลังจากรีบูตตัวจับเวลาของเราไม่ทำงานและยังคงอยู่ ไม่มีข้อมูล.

เดอะ sudo systemctl รีสตาร์ท cleanup.timer คำสั่งไม่ได้ช่วย

ซูโดเท่านั้น systemctl หยุดการล้างข้อมูลตัวจับเวลา แล้ว sudo systemctl เริ่มการล้างข้อมูล ตัวจับเวลา ทำงาน

เรามีปัญหานี้ไม่เฉพาะกับตัวจับเวลาเฉพาะเท่านั้น เรามีตัวจับเวลาจำนวนมากที่มีโครงสร้างและบริการเริ่มต้นเกือบเหมือนกัน โหลดตัวจับเวลาทั้งหมดแล้ว แต่บางตัวสามารถเข้าได้ ใช้งานอยู่ (ผ่านไปแล้ว) สถานะและไม่ทำงาน

การตั้งค่าของเรา:

พวกเราวิ่ง อูบุนตู 18.04 LTS.

เรามีสคริปต์การเริ่มต้นบริการนี้:

sudo cp <เส้นทางพื้นฐาน>/services/cleanup.service /etc/systemd/system/cleanup.service
sudo cp <BASIC PATH>/services/cleanup.timer /etc/systemd/system/cleanup.timer
sudo systemctl daemon โหลดซ้ำ
sudo systemctl เริ่มการล้างข้อมูล ตัวจับเวลา

และนี่ บริการทำความสะอาด:

[หน่วย]
Description=บริการล้างข้อมูล
ต้องการ = docker.service
After=docker.service

[บริการ]
ExecStart=<<คำสั่งเชลล์>>

และนี่ cleanup.timer:

[หน่วย]
คำอธิบาย=ตัวจับเวลาสำหรับบริการเพื่อล้างข้อมูล

[ตัวจับเวลา]
OnBootSec=1 นาที
OnUnitActiveSec=1800วินาที
ความแม่นยำวินาที=5วินาที

[ติดตั้ง]
WantedBy=timers.target

ตอนนี้ตรวจสอบคำสั่งเหล่านี้:

> sudo systemctl รายการตัวจับเวลา
ถัดไป ซ้าย หน่วยสุดท้ายที่ผ่านไป เปิดใช้งาน
n/a n/a n/a n/a cleanup.timer cleanup.service
> sudo systemctl สถานะ cleanup.timer
â cleanup.timer - ตัวจับเวลาสำหรับบริการเพื่อล้างสิ่งต่างๆ
   โหลดแล้ว: โหลดแล้ว (/etc/systemd/system/cleanup.timer; ปิดใช้งาน; ค่าที่ตั้งไว้ล่วงหน้าของผู้ขาย: เปิดใช้งาน)
   ใช้งานอยู่: ใช้งานอยู่ (ผ่านไปแล้ว) ตั้งแต่วันพุธที่ 11-2021-11-17 21:07:22 UTC; 11 ชั่วโมงที่แล้ว
  ทริกเกอร์: ไม่ระบุ

17 พฤศจิกายน 21:07:22 ip-XX-XX-XX-XX systemd[1]: เริ่มจับเวลาสำหรับบริการเพื่อล้างข้อมูล

คำถาม:

อะไรคือสาเหตุของสถานการณ์นี้และจะหลีกเลี่ยงได้อย่างไร

Score:1
ธง jp

ฉันดูเหมือนคุณลืม เปิดใช้งาน ตัวจับเวลา

systemctl เริ่มต้น <หน่วย> เริ่มตัวจับเวลานั้นทันที (เช่น เมื่อคุณติดตั้งครั้งแรกและต้องการให้มันทำงาน)

systemctl เปิดใช้งาน <หน่วย> ไม่เริ่มหน่วยตอนนี้ แต่ตั้งค่า hooks ที่เกี่ยวข้องเพื่อให้หน่วยเริ่มต้นตามสิ่งที่อยู่ในไฟล์หน่วย...

เช่น. ตัวจับเวลาจะเริ่มหลังจากรีบูตเนื่องจาก...

[ติดตั้ง]
WantedBy=timers.target

เรียกใช้สคริปต์การเริ่มต้นบริการในการบู๊ตทุกครั้งหรือไม่

เมื่อบู๊ตเครื่อง เราทริกเกอร์สคริปต์การเริ่มต้นบริการ... เรามีสคริปต์การเริ่มต้นบริการนี้:

เห็นได้ชัดว่าทำงานไม่สำเร็จเนื่องจากสคริปต์เริ่มต้นกำลังทำงานอยู่ systemctl เริ่มการล้างข้อมูลตัวจับเวลา แต่ตัวจับเวลาการล้างข้อมูลไม่ทำงานหรือล้มเหลวใน 11 ชั่วโมง

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

co flag
ตามที่ฉันเข้าใจเอกสาร กำไรหลักของ 'เปิดใช้งาน' คือการรีบูตการคงอยู่ ดังนั้นบริการจะเริ่มโดยอัตโนมัติโดยระบบ แต่เนื่องจากสคริปต์ `ข้อมูลผู้ใช้' 'เริ่มต้น' ในการบู๊ตแต่ละครั้ง ฉันจึงไม่เห็นเหตุผลที่จะ 'เปิดใช้งาน' อย่างไรก็ตาม ขอบคุณ จะตรวจสอบและทดสอบสิ่งนี้ เกี่ยวกับ `สคริปต์การเริ่มต้นบริการในทุกการบู๊ต` แต่ละอันมี `set -e` ที่จุดเริ่มต้นของสคริปต์ ดังนั้นจึงควรล้มเหลวหากคำสั่งถัดไปออกจากสถานะที่ไม่ใช่ศูนย์ แต่สิ่งนี้ยังไม่เกิดขึ้น
co flag
เกี่ยวกับ `อาจเป็นสคริปต์เริ่มต้นของคุณกำลังทำงานก่อนที่นักเทียบท่าจะพร้อมใช้งานหรืออะไรทำนองนั้น'เป็นเรื่องแปลกเพราะบริการ systemctl ทั้งหมดของฉันมีตัวเลือก `Requires=` และ `After=` และสิ่งนี้ควรบังคับให้บริการรอจนกว่าจะจำเป็น นอกจากนี้ยังมีบางสถานการณ์ที่บริการบางส่วนที่มีตัวเลือกเดียวกันทำงานได้ดีและอีกส่วนหนึ่งไม่ทำงาน
mattpr avatar
jp flag
ฉันสามารถแสดงความคิดเห็นในสิ่งที่ชัดเจนจากสิ่งที่คุณโพสต์เท่านั้น สคริปต์เริ่มต้นของคุณบอกให้เริ่มจับเวลา แต่ `journalctl -u ` แสดงว่าไม่ได้ทำงานใน 11 ชั่วโมง ดังนั้น `systemctl`/`journalctl` ผิด (ไม่น่าเป็นไปได้) หรือสคริปต์เริ่มต้นของคุณไม่ได้เริ่มจับเวลาจริง ๆ ด้วยเหตุผลบางประการ (มีโอกาสมากกว่า) ดังนั้นฉันจะเพิ่มการดีบั๊ก/การบันทึกลงในสคริปต์เริ่มต้นของคุณและดูที่การรีบูตหลายๆ ครั้ง หากคุณสามารถโพสต์เพิ่มเติม ฉันอาจจะช่วยได้มากขึ้น
Score:0
ธง ru

ฉันยังไม่คุ้นเคยกับ systemd แต่เท่าที่ฉันรู้ว่าสภาพแวดล้อม PATH ยังไม่พร้อมใช้งานในการบูท ดังนั้นสคริปต์และโปรแกรมบางตัวจึงตั้งค่าสภาพแวดล้อม PATH ก่อน สมมติว่าบริการของคุณทำงานทุกครั้งที่คุณเรียกใช้บนคอนโซล ซึ่งจะเป็นเช่นนี้เสมอ

โพสต์คำตอบ

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