วิธีการเริ่มต้นสคริปต์เชลล์หลายตัวเมื่อเริ่มต้น


3

ฉันมีเชลล์สคริปต์หกตัวที่ฉันเริ่มต้นเมื่อฉันลงชื่อเข้าใช้เชลล์สคริปต์จะเริ่มต้นด้วยสคริปต์ Python ที่ออกไปและขูดสิ่งต่าง ๆ จากเน็ตเช่นหัวข้อข่าวข้อมูลสภาพอากาศ ฯลฯ ซึ่งฉันเพิ่มลงในเดสก์ท็อปของฉันผ่านทางคอนกี้

ปัญหากำลังเริ่มต้นเชลล์สคริปต์เหล่านี้ทุกครั้งเป็นความเจ็บปวดที่แท้จริง

ฉันค้นหาและลองทำบางสิ่ง แต่ดูเหมือนว่าจะไม่ทำงาน

ใครบางคนที่นี่สามารถหลั่งน้ำตาแสงบนวิธีที่ดีที่สุดที่จะทำสิ่งนี้ได้โปรด โดยวิธีที่ฉันไม่สามารถรวมเชลล์สคริปต์ในไฟล์เดียวเพราะพวกเขาทั้งหมด 'สลีป' ในช่วงเวลาที่แตกต่างกันหลังจากใช้คำสั่งเริ่มต้น

ขอบคุณ

- แก้ไข (เพิ่มความคิดเห็นต่อไปนี้) -

สคริปต์ทั้งหมดมีรูปแบบต่อไปนี้:

#!/bin/bash

while true; do
    python /home/scott/debkaget.py > /home/scott/debka.txt
    sleep 120
done

สามารถเพิ่มเข้าไปในโปรไฟล์ได้หรือไม่ ฉันต้องการด้านการนอนหลับไป ฉันกำลังใช้ KDE 4.9

bash 

1
คุณใช้โปรแกรมจัดการหน้าต่างหรือไม่? อันไหน?
choroba

'ความเจ็บปวด' คืออะไร?
ซานเดรียใหม่

ความเจ็บปวดก็คือต้องเปิดเครื่องเทอร์มินัลพิมพ์ 'runshell1.sh', ctrl-t และทำสิ่งนี้ซ้ำแล้วซ้ำอีก และรายชื่อเชลล์สคริปต์ของฉันก็เพิ่มขึ้นเรื่อย ๆ ตอนนี้ 7 :(

ฉันคิดว่าคุณควรรับ 2 ส่วนของคำตอบและนำไปใช้ในสถานที่ที่ระบุว่า NormanRamsey
ซานเดรียใหม่

ฉันก็อยากรู้อยากเห็นเช่นกันสำหรับตัวอย่างที่ชัดเจน - ดังนั้นฉันจึงตัดสินใจที่จะสร้าง ฉันจะใช้ตัวเองในครั้งต่อไป
ซานเดรียใหม่

คำตอบ:


4

หากคุณ "เพิ่มไปยังเดสก์ท็อปของคุณ" คุณมีโปรแกรมจัดการหน้าต่างทำงานอยู่และถ้าคุณใช้ทุบตีก็อาจเป็นลีนุกซ์ ในกรณีที่คุณอาจจะดีที่สุดออกเปิดตัวสคริปต์ของคุณลงในพื้นหลังจากไฟล์ Xsession ทั้ง~/.Xsessionหรือ/etc/X11/Xsessionหรือเป็นตัวแปร สำหรับข้อมูลเพิ่มเติมลอง

man 5 Xsession
man 1 xinit

แม้ว่าฉันและ Leffler จะแสดงคำตอบวัตถุประสงค์ทั่วไปคำตอบนี้มีข้อมูลเฉพาะโดเมนมากที่สุด
New Alexandria ใหม่

3

ความเป็นไปได้อย่างหนึ่งคือเพิ่มการร้องขอที่เหมาะสมในไฟล์.bash_profileหรือของคุณ .profileเมื่อคุณเรียกใช้ด้วยตนเองคุณเพิ่ม&ในตอนท้ายเพื่อเรียกใช้ในพื้นหลังหรือไม่ ถ้าเป็นเช่นนั้นทำในโปรไฟล์ของคุณด้วย

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

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


สวัสดีขอบคุณสำหรับการตอบกลับ เริ่มกันเลยฉันกำลังใช้ KDE 4.9 เพิ่งย้ายมาที่นี่จาก Ubuntu 12.04 ฉันทำสิ่งเดียวกันบน Ubuntu แม้ว่า

มองไปที่คำแนะนำ Xsession โดยนายแรมซีย์
Jonathan Leffler

2

คุณสามารถใช้กลยุทธ์พื้นฐานนี้:

  • มีสคริปต์เริ่มต้นด้วยการสร้างไฟล์ pid script_name.pidเป็น ทำให้สคริปต์ยกเลิกหากไฟล์ pid มีอยู่
  • ให้สคริปต์ทำงานในพื้นหลัง

เมื่อคุณเรียกใช้จาก. bash_profile (หรือคล้ายกัน) ไฟล์pidจะป้องกันไม่ให้. bashrc ไขลานกระบวนการเพิ่มเติมสำหรับแต่ละเชลล์ใหม่

ต่อ NormanRamsey คุณจะเพิ่มลงใน XSession (หรือตัวจัดการหน้าต่างอื่น ๆ ):

# Web Scrapers
runshell_yahoonews.sh
runshell_blog_disney.sh
runshell_stackoverflow_election.sh
runshell_twitter_dad.sh
runshell_twitter_origamistork.sh
runshell_blog_daringfireball.sh

พิจารณาการเขียนฟังก์ชั่นการทุบตี คุณสามารถมีไฟล์lib_scrapers.sh

#!/bin/bash 
pid_path = "~/.X-scrapers/"
suff = '.pid'

function pidfile_create(invoker) {
  if [ ! -e $pid_path$invoker$suff ];
  then
    # make it
    echo $$ > $invoker$suff
  else
    # alert it existance
    cat $pid_path$invoker$suff
  fi
}
function pidfile_destroy(invoker) {
  rm $pid_path$invoker$suff
  if [ -e $pid_path$invoker$suff ];
  then
    echo "$pid_path$invoker$suff could not be destroyed properly"
  fi
}

จากนั้นในบรรทัดที่ 2 ของแต่ละเครื่องขูดของคุณ (เช่นrunshell_yahoonews.sh) สิ่งนี้จะป้องกันสคริปต์สำหรับการเรียกใช้งานถ้ามีดโกนกำลังทำงานอยู่

lib_scrapers.sh

if [ pidfile_create($0) ]
then
  exit
fi

ที่ส่วนท้ายของมีดโกนแต่ละอันใส่

pidfile_destroy($0)

คุณอาจมีการแลกเปลี่ยนอื่น ๆ แต่สิ่งนี้ฟังดูสมเหตุสมผลสำหรับสิ่งที่คุณอธิบาย

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