Score:0

งาน Cron เพื่อปิดเมื่อถอดปลั๊ก AC ไม่ทำงาน

ธง in

ฉันกำลังพยายามเรียกใช้สคริปต์ทุบตีอย่างง่ายที่จะปิดโน้ตบุ๊กของฉันหากไม่ได้เสียบปลั๊ก AC กับงาน cron

สคริปต์ของฉันเป็นดังนี้:

#!/bin/bash

ถ้า ! on_ac_power; แล้ว 
    ไฟดับ          
ไฟ

และฉันได้กำหนดค่า cron ให้ทำงานทุกนาทีดังนี้:

*/1 * * * * /home/user/Documents/script.sh

สคริปต์ทำงานได้ดีถ้าฉันเรียกใช้ด้วยตนเอง แต่อย่างอื่น ดูเหมือนว่าจะไม่มีผลภายใต้ cron

ฉันพลาดอะไรไปที่นี่?

cn flag
Cron ไม่ใช่เครื่องมือที่ถูกต้องสำหรับสิ่งนี้ สิ่งที่คุณต้องการคือบริการ `on_ac_power` คืออะไร มันไม่ได้ให้อะไรเลยเมื่อเปิด ac และเมื่อไม่ได้เปิด ac จึงดูเหมือนไร้ประโยชน์สำหรับสิ่งนี้ และปิดเครื่องฉันจะเพิ่มไดเร็กทอรี
in flag
@Rinzwind `on_ac_power` ทดสอบว่าคอมพิวเตอร์ทำงานบนสายไฟหรือไม่ เพิ่มไดเร็กทอรีทำ poweroff ได้อย่างไร อย่างที่ฉันบอกว่าสคริปต์ทำงานได้ดีถ้าฉันรันด้วยตนเอง แต่ cron ดูเหมือนจะไม่ทำงาน
us flag
นอกเหนือจากความคิดเห็นก่อนหน้านี้ `ปิดเครื่อง' ควรต้องใช้สิทธิ์รูท `sudo poweroff` อาจใช้งานได้หากผู้ใช้ที่มีปัญหาไม่จำเป็นต้องป้อนรหัสผ่าน ยังดีกว่า ใส่รายการ cron ใน `/etc/crontab` และระบุว่าจะดำเนินการเป็น `root` (แน่นอน สคริปต์ควรถูกย้ายไปยังตำแหน่งที่เหมาะสมเช่นกันในกรณีนั้น)
Soren A avatar
mx flag
@MarkusUeberall ไม่เคยใช้ `sudo` ใน scribys และไม่เคยใช้งานใน cron !! ให้รันสคริปต์ใน cron ของ root แทนหากจำเป็น
Soren A avatar
mx flag
@MarkusUeberall อย่างไรก็ตาม `poweroff` (/usr/sbin/poweroff) ชอบ /bin/systemctl wgich สามารถดำเนินการโดยใครก็ได้ ดังนั้นจึงไม่จำเป็นต้องใช้ `sudo`
us flag
@Soren A: `/bin/systemctl` _can_ ถูกดำเนินการโดยใครก็ได้ แต่การดำเนินการ `poweroff` ในฐานะผู้ใช้ที่ไม่ใช่รูทไม่จำเป็นต้องใช้งานได้หากผู้ใช้รายอื่นเข้าสู่ระบบ (ดูที่ `poweroff -i` ซึ่งฉันลืมจริงๆ กล่าวถึงข้างต้น); `sudo poweroff` _always_ ทำงานทันที
Soren A avatar
mx flag
@MarkusUeberall .. แต่ `sudo` ใช้ไม่ได้ใน crontab ... สคริปต์ต้องรันใน cron ของรูท และสำหรับผู้ใช้ที่เข้าสู่ระบบ แทบจะไม่มีผู้ใช้มากกว่าหนึ่งรายเข้าสู่ระบบโฮม แต่นอกประเด็นที่ควรระวังในระบบที่ใหญ่ขึ้น
us flag
@soren A `sudo` _does_ ทำงานใน crontab ตราบใดที่คุณไม่จำเป็นต้องป้อนรหัสผ่าน (ดูเช่น https://askubuntu.com/questions/796617/how-to-avoid-password-request-for-sudo -for-crontab-สคริปต์); เป็นความคิดที่ดีที่จะใช้มันสำหรับกรณีการใช้งานของ OP หรือไม่นั้นเป็นอีกคำถามหนึ่ง (ดูความคิดเห็นก่อนหน้าที่ชี้ไปที่บริการและ `/etc/crontab` กล่าวถึงสิ่งนี้)
James S. avatar
de flag
โปรดอธิบายในคำถามของคุณข้างต้น คำสั่งแบบเต็มที่คุณดำเนินการเมื่อคุณรันคำสั่งด้วยตนเอง รวมถึงเอาต์พุตจาก ls ที่แสดงการอนุญาตระบบไฟล์ของสคริปต์
Score:1
ธง in

ก่อนอื่นฉันไม่ได้รัน cron ภายใต้รูท

เห็นได้ชัดว่า cron จะทำงานภายใต้รูทคุณต้องเพิ่มเข้าไปด้วย sudo crontab -e, อะไรก็ได้ที่เพิ่มเข้ามาด้วย crontab -e จะไม่ทำงานเป็น sudo

ประการที่สองตามที่ระบุในการอ้างอิง:

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

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

#!/bin/bash

ถ้า ! on_ac_power; 
แล้ว 
    /sbin/ปิดเครื่อง        
ไฟ

อ้างอิง

โพสต์คำตอบ

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