Score:1

เรียกใช้โปรแกรมจากสคริปต์เมื่อดำเนินการต่อจากการหยุดชั่วคราว

ธง us

ฉันพยายามเรียกใช้โปรแกรม RealTimeSync เมื่อระบบกลับมาทำงานต่อจากโหมดสลีปโดยใช้สคริปต์ที่อยู่ใน /lib/systemd/system-sleep/ ในไฟล์ RealTimeSync_kill_suspend.sh โดยมีเนื้อหาดังนี้

#!/bin/sh

กรณี $1 ใน
        ก่อน)
                echo "$(วันที่) - $1: ฆ่า RealTimeSync" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
                ฆ่า -9 `ps -aux | pgrep RealTimeSync`
                ทางออก
                ;;
        โพสต์)
                echo "$(วันที่) - $1: เรียกใช้สคริปต์ดำเนินการต่อ RealTimeSync" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
                sh /home/bart/Applications/FreeFileSync/RealTimeSync_resume.sh
;;
เอสแซค

ฉันรู้ว่ามันรันสคริปต์ย่อย RealTimeSync_resume.sh โดยมีเนื้อหาดังนี้

#!/bin/sh

echo "$(date) - Running RealTimeSync" >> /home/bart/Applications/FreeFileSync/suspend_resume.log

/home/bart/Applications/FreeFileSync/RealTimeSync /home/bart/Documents/Documents_backup.ffs_real &

echo "$(date) - RealTimeSync ควรทำงานอยู่" >> /home/bart/Applications/FreeFileSync/suspend_resume.log

ทางออก

ขณะที่มันลากเส้นหลังจากทั้งคู่ เสียงสะท้อน ข้อความใน RealTimeSync_kill_suspend.sh สคริปต์และบรรทัดหลังทั้งคู่ เสียงสะท้อน งบใน RealTimeSync_resume.sh สคริปต์ย่อยลงในล็อกไฟล์ suspend_resume.log:

czw 5 กันยายน 2021 16:55:50 CEST - ก่อน: Killing RealTimeSync
czw, 5 กันยายน 2021, 16:55:58 CEST - โพสต์: การเรียกใช้สคริปต์ดำเนินการต่อ RealTimeSync
czw 5 กันยายน 2021 16:55:58 CEST - กำลังรัน RealTimeSync
czw, 5 กันยายน 2021, 16:56:28 CEST - RealTimeSync ควรทำงานอยู่

แต่เมื่อฉันมองหากระบวนการด้วย ps -aux | grep RealTimeSync มันไม่แสดงการจับคู่ที่เหมาะสม เพียง:

bart 31262 0.0 0.0 12252 2612 pts/0 S+ 17:38 0:00 grep --color=auto RealTimeSync

เมื่อฉันเรียกใช้สคริปต์ย่อยด้วย sh /home/bart/Applications/FreeFileSync/RealTimeSync_resume.sh ฉันได้รับกระบวนการที่ถูกต้องทำงานด้วย ps -aux | grep RealTimeSync:

bart 31066 0.0 0.0 212 68 pts/0 วินาที 17:37 0:00 /home/bart/Applications/FreeFileSync/RealTimeSync /home/bart/Documents/Documents_backup.ffs_real
bart 31071 0.3 0.1 442428 41260 pts/0 Sl 17:37 0:00 /home/bart/Applications/FreeFileSync/Bin/RealTimeSync_x86_64 /home/bart/Documents/Documents_backup.ffs_real
bart 31262 0.0 0.0 12252 2612 pts/0 S+ 17:38 0:00 grep --color=auto RealTimeSync

ไฟล์ที่กล่าวถึงทั้งหมดมี -rwxr-xr-x สิทธิ์

หลังจากค้นหาในฟอรัม ฉันมีความคิดที่ว่า RealTimeSync ต้องการบริการบางอย่างที่เปิดใช้งานเมื่อเข้าสู่ระบบซึ่งไม่สามารถใช้งานได้ ตัวอย่างเช่น ผู้ที่มีปัญหากับการรันสคริปต์ที่เริ่มซิงค์ไคลเอนต์จำเป็นต้องใช้เซิร์ฟเวอร์ X เพื่อเชื่อมต่อกับ:

ประกาศ -x DISPLAY=":0.0"
ประกาศ -x XAUTHORITY="/home/<ผู้ใช้ของคุณ>/.Xauthority"
Synclient VertEdgeScroll=1 VertTwoFingerScroll=1 HorizTwoFingerScroll=1 HorizEdgeScroll=1

จากกระทู้ฟอรัมนี้: https://ubuntuforums.org/showthread.php?t=2380045

ฉันจะขอบคุณสำหรับความช่วยเหลือใด ๆ

แก้ไข 1

ฉันพบว่า "FreeFileSync และ ReadTimeSync ต้องการเข้าถึงจอแสดงผลกราฟิก X11 ดังนั้นจึงไม่สามารถทำงานผ่านโหมดระบบได้ ในโหมดผู้ใช้ systemd รู้เกี่ยวกับเซสชันกราฟิกของผู้ใช้และใช้งาน" ดังนั้นจึงมีวิธีแก้ปัญหาที่เป็นไปได้ 2 วิธี:

อย่างใดอย่างหนึ่งที่กล่าวถึงข้างต้น ฮาร์ดโค้ด แสดง และ XAUTHORITY, ไม่สนับสนุนเนื่องจากค่า DISPLAY อาจแตกต่างกันในรูปแบบที่แตกต่างกันระหว่างเซสชันฟอร์มต่อเซสชัน

หรือทำงานเป็นบริการผู้ใช้ ไม่ใช่บริการระบบ เนื่องจากการแสดงผลเริ่มต้นสำหรับผู้ใช้

ฉันพบสิ่งนี้ที่นี่ การแก้ปัญหาการเรียกใช้ FreeFileSync เป็นบริการระบบ: https://unix.stackexchange.com/questions/529115/system-service-error-unable-to-initialize-gtk-is-display-set-properly

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

แก้ไข 2

โอเค ฉันทำสำเร็จแล้ว! ตอนนี้ฉันเรียกใช้ RealTimeSync จากสคริปต์หลัก แม้ว่าฉันคิดว่านี่จะไม่สร้างความแตกต่าง แต่สิ่งสำคัญคือการเริ่มต้น 'DISPLAY' ดังนี้:

#!/bin/sh

กรณี $1 ใน
        ก่อน)
                echo "$(วันที่) - $1: ฆ่า RealTimeSync" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
                ฆ่า -9 `ps -aux | pgrep RealTimeSync`
                ทางออก
                ;;
        โพสต์)
                echo "$(date) - เรียกใช้สคริปต์ดำเนินการต่อ RealTimeSync" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
                env DISPLAY=:1 sudo -u bart /home/bart/Applications/FreeFileSync/RealTimeSync /home/bart/Documents/Documents_backup.ffs_real
;;
เอสแซค

และตั้งค่าเจ้าของสคริปต์นี้เป็นรูท: chown รูท: รูท <script_name>

วิธีแก้ไขมาจากที่นี่: เริ่มสคริปต์หลังจากดำเนินการต่อในฐานะผู้ใช้ที่เข้าสู่ระบบ (ไม่ใช่รูท)

ตามที่ฉันเข้าใจแล้วนี่เป็นวิธีที่ดีกว่าวิธีแก้ปัญหาที่เหมาะสมเช่นฮาร์ดโค้ด แสดง อาจก่อให้เกิดปัญหา แต่ใช้งานได้ชั่วคราว ในกรณีที่ใครรู้วิธีเรียกใช้สิ่งนี้อย่างถูกต้องในฐานะผู้ใช้ที่ไม่ได้รูท ฉันจะขอบคุณสำหรับคำแนะนำ

โพสต์คำตอบ

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