Điểm:0

Tập lệnh Cron và bash hiển thị các bản ghi khác nhau

lá cờ de

Tôi có một tập lệnh đơn giản để tìm một tai nghe bluetooth được ghép nối như bên dưới và lên lịch cho nó chạy trong cron mỗi phút. Nó hoạt động và kết nối với tai nghe bluetooth được ghép nối khi nó được bật và không thành công nếu thiết bị bluetooth bị tắt như mong đợi. Để gỡ lỗi bộ lập lịch cron, tôi đã ghi nhật ký của tập lệnh trong nhật ký. Và nhật ký đó chỉ thêm 0 thiết bị xuất chuẩn chứ không phải 1 thiết bị xuất chuẩn.

Kịch bản

#!/bin/bash

DẤU THỜI GIAN=`ngày "+%d-%m-%Y %H:%M:%S"`

#rfkill chặn bluetooth --- Sử dụng cái này để chặn bluetooth
bluetoothctl bật nguồn
nếu [ $? == 0 ]
sau đó
    echo "$TIMESTAMP Bluetooth đã bắt đầu. Đang kết nối với thiết bị đã ghép nối"
    bluetoothctl kết nối 74:45:CE:97:90:72
    nếu [ $? == 1 ]
    sau đó
        echo "$TIMESTAMP Không thể kết nối tai nghe Sony. Vui lòng kiểm tra tính khả dụng của tai nghe"
        bluetoothctl tắt nguồn
        echo "$TIMESTAMP Đã dừng Bluetooth"
    khác
        echo "$TIMESTAMP Đã kết nối với Tai nghe Sony qua Bluetooth"
    fi
fi

Thời gian:

#Để kết nối Bluetooth tự động
* * * * * /home/xxxxx/Documents/Shell/scripts/bluetooth.sh >> /home/xxxxx/Documents/Shell/scripts/logs/bluetooth.log 2>&1

Khi tôi chạy tập lệnh theo cách thủ công, nó sẽ bắt lỗi thiết bị xuất chuẩn và thiết bị xuất chuẩn dựa trên kết nối.

Bật nguồn thay đổi thành công
23-01-2022 22:12:59 Bluetooth đã bắt đầu. Đang kết nối với thiết bị đã ghép nối
Đang cố kết nối với 74:45:CE:97:90:72
Không thể kết nối: org.bluez.Error.Failed
1
23-01-2022 22:12:59 Đã kết nối với Tai nghe Sony qua Bluetooth
Gian hàng HP:~/Documents/Shell/scripts$

Nhưng nhật ký /home/xxxxx/Documents/Shell/scripts/logs/bluetooth.log luôn có đầu ra bên dưới là được kết nối thành công bất kể kết nối là gì.

23-01-2022 22:10:01 Bluetooth đã bắt đầu. Đang kết nối với thiết bị đã ghép nối
Đang cố kết nối với 74:45:CE:97:90:72
0
23-01-2022 22:10:01 Đã kết nối với Tai nghe Sony qua Bluetooth
23-01-2022 22:11:01 Bluetooth bắt đầu. Đang kết nối với thiết bị đã ghép nối
Đang cố kết nối với 74:45:CE:97:90:72
0
23-01-2022 22:11:01 Đã kết nối với Tai nghe Sony qua Bluetooth
23-01-2022 22:12:01 Bluetooth đã bắt đầu. Đang kết nối với thiết bị đã ghép nối
Đang cố kết nối với 74:45:CE:97:90:72
0
23-01-2022 22:12:01 Đã kết nối với Tai nghe Sony qua Bluetooth
23-01-2022 22:13:01 Bluetooth đã bắt đầu. Đang kết nối với thiết bị đã ghép nối
Đang cố kết nối với 74:45:CE:97:90:72
0
23-01-2022 22:13:01 Đã kết nối với Tai nghe Sony qua Bluetooth
23-01-2022 22:14:01 Bluetooth đã bắt đầu. Đang kết nối với thiết bị đã ghép nối
Đang cố kết nối với 74:45:CE:97:90:72
0
23-01-2022 22:14:01 Đã kết nối với Tai nghe Sony qua Bluetooth

Ai đó có thể giúp tôi tại sao nhật ký của cron không có lỗi bất cứ khi nào bluetooth không được kết nối không?

bac0n avatar
lá cờ cn
Thay vào đó, bạn nên chuyển tập lệnh của mình sang systemd.
Zanna avatar
lá cờ kr
Nghi ngờ nó sẽ tạo ra sự khác biệt về chức năng, nhưng FYI `if` kiểm tra trạng thái thoát của một lệnh. Đó là cách nó hoạt động. Người ta không bao giờ cần viết những thứ như `một số lệnh; nếu [ $? = 0 ]; sau đó ...` Thay vào đó: `if một số lệnh; rồi...`
Moriartyalex avatar
lá cờ de
@Zanna Tôi đã sử dụng ```if ! bluetoothctl kết nối 74:45:CE:97:90:72 #nếu [ $? == 1 ]``` nó vẫn hoạt động như cũ. Thao tác thực thi tập lệnh sẽ in câu lệnh if nếu không thể kết nối với thiết bị. Nhưng việc thực thi cron và nhật ký của nó chỉ hiển thị khác.
Zanna avatar
lá cờ kr
tốt, tôi không bao giờ có thể khiến `cron` hoạt động, vì vậy không thể nhận xét về điều đó!
Điểm:-1
lá cờ in

Thứ nhất, ngay cả việc chạy thủ công của bạn cũng không cho kết quả như mong đợi. Thiết bị không kết nối được và đầu ra cuối cùng sẽ là "Không thể kết nối với tai nghe sony".

Lựa chọn 1: Vấn đề là với "echo $?". Loại bỏ tuyên bố này và bạn sẽ ổn thôi.

Lựa chọn 2: tiếng vang $? luôn đánh giá bằng 0 do đó nếu [$? == 1 ] luôn trả về false và thực hiện câu lệnh khác.

Vì vậy, chỉ cần lẻn vào một biến như thế này.

bluetoothctl kết nối 74:45:CE:97:90:72 x=$? tiếng vang $x nếu [ $x == 1 ]

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.