Điểm:1

crontab sẽ không chạy tập lệnh của tôi

lá cờ in

Tôi đã cố chạy tập lệnh khi khởi động nhưng không thành công. crontab

@reboot /bin/sleep 8s && /bin/bash /home/user/reconnect.sh > /home/user/reconnect.log 2>&1

Kịch bản chạy tốt nếu tôi thực hiện nó bằng tay.

#!/bin/bash

# Nếu bắt đầu với quyền root, sau đó bắt đầu lại với tư cách người dùng "người dùng":
nếu [ "$(id -u)" -eq 0 ]; sau đó
    exec sudo -H -u người dùng $0 "$@"
    echo "Điều này không bao giờ đạt được.";
fi
echo "Điều này chạy với tư cách người dùng $(id -un)";

trong khi [ "đúng" ]
làm
        VPNCON=$(/bin/nmcli con | /bin/grep PureVPN_PPTP | /bin/cut -f18 -d " ")
        nếu [[ $VPNCON != ens3 ]]; sau đó
                /bin/echo "Đã ngắt kết nối, đang cố kết nối lại..."
                (/bin/sleep 1s && /bin/nmcli bật uuid 1dfcb9f6-1b90-3d92-9f8b-106dc35da0f4)
        elif IP=$(ifconfig ppp0 | awk '/inet/{print $2; exit}')
                (/bin/ngủ 5 giây)
                [ "$IP" != "xxx.xxxx.xxx.xxx" ]; sau đó
                /bin/echo "IP sai: $IP"
                (/bin/sleep 1s && /bin/nmcli con down uuid 1dfcb9f6-1b90-3d92-9f8b-106dc35da0f4 && /bin/sleep 2s && /bin/nmcli con up uuid 1dfcb9f6-1b90-3d92-9f8b-106dc35da0f4)
        khác
                /bin/echo "Đã được kết nối!"
        fi
        /bin/ngủ 30
xong

Kể từ bài đăng đầu tiên, tôi đã làm việc một chút với kịch bản. Nó hoạt động tốt thực hiện bằng tay.

Được thực hiện bởi crone với tư cách là người dùng, tôi gặp lỗi sau:

Điều này chạy như người dùng người dùng
Đã ngắt kết nối, đang cố kết nối lại...
Lỗi: Kích hoạt kết nối không thành công: Không được phép kiểm soát mạng.

Bằng cách nào đó, người dùng thực hiện với cron không có các quyền giống như tự nó. Vấn đề là, khi được thực thi với quyền root, nó cũng bị lỗi. Thông tin đăng nhập cho vpn được lưu trữ trong khóa người dùng, vì vậy root không thể thiết lập kết nối:-/

lá cờ vn
Điều này có trả lời câu hỏi của bạn không? [Không thể tạo công việc crontab cho chương trình phế liệu của tôi](https://askubuntu.com/questions/1288111/cannot-create-a-crontab-job-for-my-scrapy-program)
lá cờ hr
Tôi khuyên bạn nên bắt đầu bằng cách ghi lại đầu ra + lỗi từ tập lệnh của bạn vào nhật ký cũ. `@reboot /bin/bash /home/user/reconnect.sh > /home/user/reconnect.log 2>&1`. Kiểm tra nhật ký có thể cho biết vấn đề là gì.
user535733 avatar
lá cờ cn
Khi bạn học cách chạy công việc @reboot, bạn nên dành thời gian tìm hiểu cách các mục tiêu systemd hoạt động khi khởi động. Sử dụng các mục tiêu mang lại cho bạn nhiều quyền kiểm soát hơn so với cronjobs.
Soren A avatar
lá cờ mx
Bạn có thể đăng ký/var/log/syslog nếu tập lệnh chạy cron.
Sturmkater avatar
lá cờ in
@PabloBianchi, thật đáng buồn là không. Nhưng thật tốt khi biết cách thêm tất cả các đường dẫn một cách dễ dàng!
Sturmkater avatar
lá cờ in
@steeldriver Đẹp đấy!!! Ghi nhật ký rất tiện dụng để khắc phục sự cố. Cảm ơn
lá cờ hr
@Sturmkater, điều này nghe giống như việc bạn nên làm thông qua các ứng dụng khởi động của người dùng, thay vì thông qua cron. Xem ví dụ [Làm cách nào để tôi khởi động ứng dụng tự động khi đăng nhập?](https://askubuntu.com/questions/48321/how-do-i-start-applications-automatically-on-login)
Điểm:1
lá cờ it

Công việc chạy qua cron, hoặc hệ thống tập lệnh khởi động không chạy trong cùng một môi trường thời gian chạy mà bạn có trên máy tính để bàn của mình. hệ thống kịch bản khởi động được chạy như nguồn gốc. Không ai trong số bạn CON ĐƯỜNG các thay đổi hoặc cài đặt biến môi trường khác sẽ tự động được truyền tới cron Công việc. Ví dụ, không có $HIỂN THỊ, vì vậy các chương trình GUI cần được xử lý đặc biệt (đọc người đàn ông xhost).

Người ta có thể đặt các biến môi trường cho tất cả mọi người cron công việc trong crontab tập tin Đọc người đàn ông 5 crontab.

Nhìn vào kết quả của echo "=== id ==="; id;echo "=== set ==="; set; echo "=== env ==="; env | sort;echo "=== bí danh ==="; bí danh trong mỗi môi trường của bạn.

Kể từ khi chỉ huy một phần của crontab theo mặc định, dòng được giải thích bởi /bin/sh, có cú pháp đơn giản hơn /bin/bash, tôi khuyên bạn nên có chỉ huy là một cuộc gọi đến một đánh đập tập lệnh (có thể thực thi, được gắn kết, bắt đầu bằng #!/bin/bash) thiết lập môi trường, sau đó gọi chương trình mong muốn.

Điểm:0
lá cờ in

Cảm ơn, Steeldrive :-) Tôi đoán một khi bạn bắt đầu với GUI, bạn sẽ bị dính vào nó. Đề xuất của bạn hoạt động như sự quyến rũ.

@Sturmkater, điều này nghe có vẻ giống như việc bạn nên làm thông qua các ứng dụng khởi động của người dùng, thay vì thông qua cron. Xem ví dụ Thế nào Tôi có tự động khởi động ứng dụng khi đăng nhập không? thép

Đă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.