Điểm:0

Cách chạy tập lệnh Python venv với màn hình trong crontab

lá cờ jp

Tôi có một tập lệnh sh với nội dung sau:

màn hình -mdS myscript /home/myscript/myscript_env/bin/python3 /home/myscript/bot.py

Tập lệnh này thực thi tập lệnh python và mở nó trong một màn hình mới.

Nó hoạt động tốt khi thực thi tệp sh trong thiết bị đầu cuối, tuy nhiên khi sử dụng crontab để thực thi tập lệnh sh này khi khởi động lại, nó không hoạt động:

@khởi động lại ./home/myscript/start.sh
lá cờ cn
Bạn có thể [chỉnh sửa](https://serverfault.com/posts/1081562/edit) câu hỏi bao gồm tất cả `./home/myscript/start.sh` được không
lá cờ cn
Ngoài ra, điều này có lẽ đáng để đọc https://unix.stackexchange.com/questions/109804/crontabs-reboot-only-works-for-root
lá cờ jp
@hardillb Tôi đã đăng nội dung của tập lệnh ở trên
Điểm:1
lá cờ cn

Đầu tiên, các tập lệnh thực sự nên bắt đầu bằng một shebang trỏ đến trình thông dịch sẽ chạy nó, đặc biệt là khi chuyển nó sang thứ gì đó không phải là trình bao hiện có để chạy nó vì bạn không biết môi trường nào sẽ được sử dụng. Vì vậy, kịch bản đầy đủ có lẽ sẽ giống như

#!/bin/sh
màn hình -mdS myscript /home/myscript/myscript_env/bin/python3

Thứ hai, như đã đề cập trong câu hỏi tôi liên kết đến, @khởi động lại không phải lúc nào cũng được hỗ trợ, cho tất cả người dùng hoặc tất cả.

Một tùy chọn tốt hơn nhiều để bắt đầu thứ gì đó khi khởi động là dịch vụ systemd (giả sử bạn không sử dụng thứ gì đó đủ cũ để vẫn sử dụng tập lệnh init.d). Một cuộc thảo luận hợp lý về cách thiết lập một dịch vụ là đây

Điểm:0
lá cờ us

Tập lệnh shell của bạn nên có #!/bin/bash hoặc #!/bin/sh ở trên cùng. hoặc nếu nó được gọi qua crontab thì nó sẽ được gọi bằng /bin/sh hoặc /bin/bash tập lệnh của bạn. Một giải pháp thay thế so với crontab là tận dụng lợi thế của "/etc/rc.d/rc.local" tập tin.

màn hình sh -mdS myscript /home/myscript/myscript_env/bin/python3

chỉ cần đảm bảo rằng tệp rc.local có thể thực thi được:

chmod +x /etc/rc.d/rc.local
Điểm:0
lá cờ cn

Bạn có bất kỳ đầu ra nào trong thư được tạo bởi cron không? Hãy thử kiểm tra nhật ký cron hoặc thư cho người dùng có crontab chứa mục nhập này và điều đó sẽ đưa ra gợi ý về sự cố.

Nhìn thoáng qua, đối với tôi, có vẻ như lý do có lẽ là phần phụ . trong lệnh. Hãy thử thay đổi

@khởi động lại ./home/myscript/start.sh

đến

@khởi động lại /home/myscript/start.sh

và xem nếu điều đó giúp.

Theo như tôi biết thì cronjob chạy các lệnh từ thư mục chính của người dùng (ví dụ: /nguồn gốc) thay vì thư mục gốc của hệ thống tệp (tức là, /).

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