ใช้. sh ทุก ๆ 5 นาที


12

ฉันมีสคริปต์. sh ที่ดาวน์โหลดภาพถ่ายจากเซิร์ฟเวอร์ของดาวเทียมญี่ปุ่นและตั้งเป็นภาพพื้นหลัง ฉันใส่ไว้ในรายการเริ่มต้นแล้ว แต่ฉันจะเรียกใช้ทุก ๆ ครั้งเช่น 5 นาทีโดยอัตโนมัติได้อย่างไร


1
ลองใช้ cronmaker.com คุณสามารถสร้าง cron-expressions และวางไว้กับ crontab -e
We are Borg

2
ภาพเปลี่ยนไปทุก ๆ 5 นาทีหรือไม่? ลองใช้ช่วงเวลาที่สร้างภาระที่ไม่จำเป็นน้อยกว่าบนเซิร์ฟเวอร์เป้าหมาย หรือตรวจสอบให้แน่ใจว่าคุณดาวน์โหลดหากไฟล์นั้นมีการเปลี่ยนแปลงจริงๆ
til_b

1
โดยวิธีการที่ URL สำหรับพื้นหลังพื้นที่คืออะไร?
bohdan_trotsenko

คำตอบ:


14

ตัวเลือกที่ขี้เกียจ

หากคุณต้องการวิธีที่ง่ายและหลีกเลี่ยงการค้นหาตัวแปรสภาพแวดล้อมที่จะตั้ง:

  • ตรวจสอบให้แน่ใจว่าสคริปต์ของคุณมี Shebang อยู่
  • ทำให้ปฏิบัติการได้
  • เพิ่มรายการต่อไปนี้ลงในแอปพลิเคชันเริ่มต้น:

    /bin/bash -c "sleep 15 && while true; do <path_to_your_script.sh> ; sleep 300; done"

    Dash> แอปพลิเคชั่นเริ่มต้น> เพิ่ม เพิ่มคำสั่ง:

    /bin/bash -c "sleep 15 && while true; do <path_to_your_script.sh> ; sleep 300; done"

คำอธิบาย

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

gsettings get org.gnome.desktop.background picture-uri <wallpaper>

cronการตั้งวอลล์เปเปอร์ที่เกือบจะแน่นอนคำสั่งจะทำลายเมื่อเรียกใช้จาก

ข้อเสียของ "การแก้ปัญหาขี้เกียจ" เป็นทฤษฎีอย่างหมดจด คำสั่งที่หลับอย่างต่อเนื่องจริงไม่มีความหมายต่อระบบของคุณ

ข้อมูลเพิ่มเติม; อีกทางเลือกหนึ่ง

การอ่านโพสต์นี้และจากประสบการณ์ในอดีตฉันค่อนข้างมั่นใจว่าDBUS_SESSION_BUS_ADDRESSจำเป็นต้องตั้งค่าตัวแปรสภาพแวดล้อม

โดยเพิ่มหัวข้อต่อไปนี้ที่ด้านบนของสคริปต์ (ใต้ shebang):

PID=$(pgrep gnome-session)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)

cronแล้วคุณควรจะสามารถประสบความสำเร็จเรียกใช้จาก

อย่างไรก็ตามคุณสามารถบันทึกความเร่งรีบได้เป็นอย่างดีและเลือกตัวเลือกที่ขี้เกียจ


@AleksanderMahnyov ยินดีต้อนรับ ดีใจที่มันได้ผล :)
Jacob Vlijm

2
มันดีกว่ามากที่จะใช้งาน cron
Luka Ramishvili

1
@LukaRamishvili ขอบคุณสำหรับความคิดเห็น อย่างไรก็ตาม: และทำไมเป็นเช่นนั้น? คำสั่ง sleep หมายถึงไม่มีอะไรในระบบของคุณ ข ฉันรวมตัวเลือกด้วย
Jacob Vlijm

1
ไม่เช่นนั้นการวิจัยที่ดีเกี่ยวกับตัวแปรเซสชั่นคำพังเพยมันจะช่วย OP ได้มากเนื่องจากจะต้องใช้วิธีใดวิธีหนึ่ง
Luka Ramishvili

2
ฉันแค่ดู: cpu 0.0%เรากำลังพูดถึงเรื่องภาษีอะไร?
Jacob Vlijm

25

crontabใส่ไว้ในของคุณ

เปิดcronตารางของคุณโดย:

crontab -e

ตอนนี้เพิ่ม:

*/5 * * * * /path/to/script.sh

อย่าลืมทำให้สคริปต์ใช้งานได้ล่วงหน้า


เนื่องจากสคริปต์ของคุณขึ้นอยู่กับ X อาจเป็นความคิดที่ดีที่จะเพิ่มในDISPLAYสภาพแวดล้อมของสคริปต์:

*/5 * * * * DISPLAY=:0 /path/to/script.sh

แทนที่:0ด้วยจริงของคุณDISPLAY(สามารถพบได้echo $DISPLAYจากเซสชั่นแบบโต้ตอบ)

หากจำเป็นคุณสามารถเพิ่มXAUTHORITYตัวแปรสภาพแวดล้อมด้วย:

*/5 * * * * DISPLAY=:0 XAUTHORITY="~/.Xauthority" /path/to/script.sh

echo $XAUTHORITYอีกครั้งคุณสามารถหาค่าโดย


1
ถ้าไม่แน่ใจว่าจะทำงานร่วมกับตัวแปรสภาพแวดล้อมที่ จำกัด ของ cron แต่ขอดูว่า OP กล่าวว่าการทำงาน :)
จาค็อบ Vlijm

1
@AleksanderMahnyov โปรดแก้ไขคำถามของคุณเพื่อเพิ่มสคริปต์, ยากที่จะพูดโดยไม่เห็นเนื้อหา.. อาจเป็นปัญหาDISPLAY(และ / หรือXAUTHORITY) ..
heemayl

1
@Kartagis Cron ไม่สามารถจัดการวินาทีนอกจากนี้ยังมีคุณกำลังพยายามที่จะทำสำหรับชั่วโมงซึ่งยังคงผิดไวยากรณ์ ..
heemayl

2
ฉันชอบวิธีนี้มากกว่า "วิธีขี้เกียจ" เพราะฉันรู้เกี่ยวกับ cron แต่ต้องการหลักสูตรทบทวนอีกเล็กน้อย นี่คือสิ่งที่ฉันทำขอบคุณมาก! :)
ZaxLofful

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