Score:0

สคริปต์ Cron และ bash แสดงบันทึกที่แตกต่างกัน

ธง de

ฉันมีสคริปต์ง่าย ๆ ในการค้นหาชุดหูฟังบลูทู ธ ที่จับคู่ไว้ด้านล่างและกำหนดให้ทำงานทุก ๆ นาทีใน cron ทำงานและเชื่อมต่อกับชุดหูฟังบลูทูธที่จับคู่เมื่อเปิดเครื่อง และจะล้มเหลวหากปิดอุปกรณ์บลูทูธตามที่คาดไว้ ในการดีบักตัวกำหนดตารางเวลา cron ฉันจับบันทึกของสคริปต์ในบันทึก และบันทึกนั้นเพิ่มเพียง 0 stdout และไม่ใช่ 1 stderr

สคริปต์

#!/bin/bash

TIMESTAMP=`วันที่ "+%d-%m-%Y %H:%M:%S"`

#rfkill บล็อกบลูทูธ --- ใช้สิ่งนี้เพื่อบล็อกบลูทูธ
เปิดบลูทูธctl
ถ้า [ $? == 0 ]
แล้ว
    echo "$TIMESTAMP Bluetooth เริ่มต้นแล้ว กำลังเชื่อมต่อกับอุปกรณ์ที่จับคู่"
    bluetoothctl เชื่อมต่อ 74:45:CE:97:90:72
    ถ้า [ $? == 1 ]
    แล้ว
        echo "$TIMESTAMP ไม่สามารถเชื่อมต่อชุดหูฟัง Sony โปรดตรวจสอบความพร้อมใช้งานของชุดหูฟัง"
        ปิดบลูทูธctl
        echo "$TIMESTAMP หยุดบลูทูธ"
    อื่น
        echo "$TIMESTAMP เชื่อมต่อกับชุดหูฟัง Sony ผ่าน Bluetooth"
    ไฟ
ไฟ

ครอน:

#เพื่อเชื่อมต่อบลูทูธโดยอัตโนมัติ
* * * * * /home/xxxxx/Documents/Shell/scripts/bluetooth.sh >> /home/xxxxx/Documents/Shell/scripts/logs/bluetooth.log 2>&1

เมื่อฉันเรียกใช้สคริปต์ด้วยตนเอง มันจะจับ stderr และ stdout ตามการเชื่อมต่อ

เปลี่ยนการเปิดเครื่องสำเร็จ
23-01-2022 22:12:59 Bluetooth เริ่มทำงาน กำลังเชื่อมต่อกับอุปกรณ์ที่จับคู่
กำลังพยายามเชื่อมต่อกับ 74:45:CE:97:90:72
เชื่อมต่อไม่สำเร็จ: org.bluez.Error.Failed
1
23-01-2022 22:12:59 เชื่อมต่อกับชุดหูฟัง Sony ผ่าน Bluetooth
HP-Pavilion:~/Documents/Shell/scripts$

แต่ log /home/xxxxx/Documents/Shell/scripts/logs/bluetooth.log จะมีเอาต์พุตด้านล่างเสมอเมื่อเชื่อมต่อสำเร็จโดยไม่คำนึงถึงการเชื่อมต่อ

23-01-2022 22:10:01 Bluetooth เริ่มทำงาน กำลังเชื่อมต่อกับอุปกรณ์ที่จับคู่
กำลังพยายามเชื่อมต่อกับ 74:45:CE:97:90:72
0
23-01-2022 22:10:01 เชื่อมต่อกับชุดหูฟัง Sony ผ่าน Bluetooth
23-01-2022 22:11:01 Bluetooth เริ่มทำงาน กำลังเชื่อมต่อกับอุปกรณ์ที่จับคู่
กำลังพยายามเชื่อมต่อกับ 74:45:CE:97:90:72
0
23-01-2022 22:11:01 เชื่อมต่อกับชุดหูฟัง Sony ผ่าน Bluetooth
23-01-2022 22:12:01 Bluetooth เริ่มทำงาน กำลังเชื่อมต่อกับอุปกรณ์ที่จับคู่
กำลังพยายามเชื่อมต่อกับ 74:45:CE:97:90:72
0
23-01-2022 22:12:01 เชื่อมต่อกับชุดหูฟัง Sony ผ่าน Bluetooth
23-01-2022 22:13:01 Bluetooth เริ่มทำงาน กำลังเชื่อมต่อกับอุปกรณ์ที่จับคู่
กำลังพยายามเชื่อมต่อกับ 74:45:CE:97:90:72
0
23-01-2022 22:13:01 เชื่อมต่อกับชุดหูฟัง Sony ผ่าน Bluetooth
23-01-2022 22:14:01 Bluetooth เริ่มทำงาน กำลังเชื่อมต่อกับอุปกรณ์ที่จับคู่
กำลังพยายามเชื่อมต่อกับ 74:45:CE:97:90:72
0
23-01-2022 22:14:01 เชื่อมต่อกับชุดหูฟัง Sony ผ่าน Bluetooth

ใครสามารถช่วยฉันได้บ้างว่าทำไมบันทึกของ cron ไม่มีข้อผิดพลาดเมื่อใดก็ตามที่ไม่ได้เชื่อมต่อบลูทู ธ

bac0n avatar
cn flag
คิดว่าคุณควรย้ายสคริปต์ไปที่ systemd แทน
Zanna avatar
kr flag
สงสัยว่าจะสร้างความแตกต่างในการทำงาน แต่ FYI `if` ตรวจสอบสถานะการออกของคำสั่ง นั่นคือวิธีการทำงาน เราไม่จำเป็นต้องเขียนสิ่งต่าง ๆ เช่น `some command; ถ้า [ $? = 0 ]; แล้ว ...` แทน: 'ถ้าบางคำสั่ง; แล้ว...`
Moriartyalex avatar
de flag
@Zanna ฉันใช้ ```if ! bluetoothctl เชื่อมต่อ 74:45:CE:97:90:72 #ถ้า [ $? == 1 ]``` ยังคงใช้งานได้เหมือนเดิม การดำเนินการด้วยตนเองของสคริปต์จะพิมพ์คำสั่ง if หากไม่สามารถเชื่อมต่อกับอุปกรณ์ได้ แต่การดำเนินการ cron และบันทึกจะแสดงอย่างอื่นเท่านั้น
Zanna avatar
kr flag
ฉันไม่สามารถให้ `cron` ทำงานได้ ดังนั้นจึงไม่สามารถแสดงความคิดเห็นได้!
Score:-1
ธง in

ประการแรก แม้แต่การเรียกใช้ด้วยตนเองของคุณก็ไม่ได้ให้ผลลัพธ์ที่คาดหวัง อุปกรณ์ล้มเหลวในการเชื่อมต่อและผลลัพธ์สุดท้ายที่ออกมาคือ "ไม่สามารถเชื่อมต่อกับชุดหูฟัง Sony"

ตัวเลือกที่ 1: ปัญหาอยู่ที่ "echo $?" ลบข้อความนี้แล้วคุณจะสบายดี

ตัวเลือกที่ 2: ก้อง $? จะประเมินเป็น 0 เสมอเนื่องจากถ้า [$? == 1 ] ส่งคืนค่าเท็จเสมอและดำเนินการตามคำสั่ง else

ดังนั้นเพียงแค่แอบเข้าไปในตัวแปรเช่นนี้

bluetoothctl เชื่อมต่อ 74:45:CE:97:90:72 x=$? เสียงสะท้อน $x ถ้า [ $x == 1 ]

โพสต์คำตอบ

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