รันเชลล์สคริปต์ในเซสชันเทอร์มินัลที่มีอยู่


0

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

deployment script
    accept user input for deployment parameters
    echo "deployment initiated"
    TTY=`tty`
    start helper 1 in detached screen, dumped to a temp file
    exit

helper 1
    export from SVN
    compress files
    upload to temporary directory on live servers
    swap old and new web directories on live servers
  * start helper 2 in $TTY
    exit

helper 2
    echo "deployment done"
    echo "do you want to view deployment log? [y/N]"
    take user input
    if yes
        output temp file
    delete temp file
    exit

ทุกอย่างนั้นง่ายพอยกเว้นคำสั่งที่มีเครื่องหมาย * ฉันสามารถไปป์ข้อความแบบสแตติกwrite $TTYได้ แต่เพื่อรับอินพุตผู้ใช้ฉันจะต้องเรียกใช้งานเชลล์สคริปต์จากภายนอกเทอร์มินัลที่จะแสดง มีวิธีการทำเช่นนี้?

(ฉันใช้ CentOS บนเซิร์ฟเวอร์ dev อยู่แล้ว)


หากคุณกำลังสร้างบางสิ่งบางอย่างสำหรับการปรับใช้มันควรจะเป็นค่าเริ่มต้นเขียนล็อกไฟล์ หากผู้ใช้ต้องการดูบันทึกพวกเขาสามารถออกแรงพยายามทำด้วยตนเอง ไม่เช่นนั้นคุณจะจบลงด้วยการที่คนกำลังวิ่งyes no | yourscript.shตลอดเวลาซึ่งมันน่ารำคาญนิดหน่อยและไม่จำเป็น tl; dr: ทำให้เป็นแบบไม่โต้ตอบ
zebediah49

สคริปต์ปัจจุบันมีการบันทึกของตัวเองทั้งในฐานข้อมูลและไฟล์บันทึก อย่างไรก็ตามบันทึกเหล่านี้เป็นเพียงบรรทัดเดียวที่ระบุว่าใครปรับใช้อะไรและเมื่อใด ไฟล์ temp จะเป็นดัมพ์แบบเต็มของทุกสิ่งที่สคริปต์ส่งคืนในปัจจุบันรวมถึงข้อความการเชื่อมต่อ ssh การชำระเงิน svn และอื่น ๆ โดยรวมเอาต์พุตในสคริปต์ตามที่เป็นอยู่คือประมาณ 25 บรรทัด การบันทึกสิ่งนี้ลงในไฟล์ถาวรเป็นเรื่องมากเกินไป // การตัดสินใจทำให้คำสั่งโต้ตอบได้เหนือหัวฉัน นั่นเป็นสิ่งที่ต้องทำ ส่วนใหญ่จะถูกใช้โดยนักพัฒนา PHP ซึ่งหลายคนมีประสบการณ์น้อยมากกับบรรทัดคำสั่ง
Mikkel

คำตอบ:


1

คุณสามารถเปิดตัวช่วย 2 เชื่อมต่อกับ TTY ด้วยคำสั่งเช่น:

helper2.sh >$TTY 2>&1 <$TTY

เพื่อเปลี่ยนเส้นทางอินพุตมาตรฐานเอาต์พุตมาตรฐานและข้อผิดพลาดมาตรฐานไปยัง TTY

น่าเสียดายที่มีปัญหากับวิธีนี้:

  1. เมื่อ "สคริปต์การปรับใช้" ออกจากเชลล์จะอ่านอินพุตจาก TTY เพื่อรับผู้ใช้คำสั่งถัดไป เมื่อทั้งเชลล์และ helper2.sh พยายามอ่านจาก TTY ซึ่งอินพุตของผู้ใช้ไม่สามารถคาดเดาได้

  2. หากผู้ใช้เริ่มต้นและแก้ไขหรือคำสั่งอื่นหลังจากเปิดตัว 'สคริปต์การปรับใช้' ผลลัพธ์จากตัวช่วย 2 จะทำให้เกิดมลพิษในสิ่งที่อยู่บนหน้าจอ

แนวทางอื่น ๆ :

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