Điểm:3

Lập lịch tác vụ tiền cảnh trong Linux tương tự như Trình lập lịch tác vụ của Windows

lá cờ cn

Tôi có một ứng dụng hàng loạt trên Windows mà tôi chạy hàng ngày vào lúc nửa đêm. Gần đây, tôi đã chuyển đổi tập lệnh này thành tập lệnh Linux shell trên máy Linux và muốn chạy tập lệnh này hàng ngày vào lúc nửa đêm. Yêu cầu của tôi như sau: -

  • Để tập lệnh Shell chạy ở nền trước - điều này cho phép tôi xem đầu ra của quy trình đang chạy và sửa/sửa mọi thứ nếu nó không thành công.
  • Tương tự như cách hoạt động của bộ lập lịch tác vụ Windows, tôi muốn có một danh sách các tập lệnh mà tôi có thể chạy và những danh sách đó có thể được bật/tắt.
  • (Tùy chọn) Lý tưởng nhất là trình lập lịch tác vụ tương đương có thể được sửa đổi theo chương trình. Điều này sẽ cho phép tôi tắt/bật các tác vụ dựa trên kết quả của một tác vụ đã chạy.

Điều này có khả thi không? Tôi đã xem các liên kết bên dưới nhưng chúng không chứa tất cả các tiêu chí mà tôi cần cho trường hợp sử dụng của mình. Nếu một trong những liên kết dưới đây là cách chính xác để đi thì một ví dụ có thể thực sự hữu ích.

mchid avatar
lá cờ bo
Bạn có thể vui lòng giải thích lý do tại sao họ không đáp ứng tiêu chí của bạn? Hãy cụ thể. Nếu không, chúng tôi sẽ đoán điều gì đó bạn đã xem xét và có thể lãng phí thời gian của chúng tôi. Cảm ơn.
mchid avatar
lá cờ bo
Nhân tiện, [để chạy một công việc định kỳ lúc nửa đêm](https://crontab.guru/every-night-at-midnight), bạn sẽ đặt trước lệnh hoặc đường dẫn đến tập lệnh của mình bằng `0 0 * * *` Ví dụ: , để chạy `/home/youssif/myscript` , bạn sẽ sử dụng `0 0 * * /home/youssif/myscript` trong tệp crontab của mình. Để chỉnh sửa tệp crontab của bạn, hãy sử dụng `crontab -e` để chạy lệnh với tư cách là người dùng hiện tại của bạn. Ngoài ra, nếu bạn thực sự cần chạy lệnh với quyền root, bạn có thể chạy `sudo crontab -e` để chỉnh sửa tệp crontab của mình.
mchid avatar
lá cờ bo
Phút là 0. Giờ là 0. Mỗi ngày trong tháng = * Mỗi tháng = * Mỗi ngày trong tuần = *
Zanna avatar
lá cờ kr
Điều này là khá rộng cho trang web của chúng tôi. Nó có thể hữu ích nếu bạn giải thích những gì tập lệnh của bạn làm hoặc chia sẻ nó trong câu hỏi. Tốt nhất, tôi khuyên bạn nên thử và xác định các vấn đề bạn gặp phải để có thể đặt câu hỏi cụ thể hơn.
Điểm:8
lá cờ bo

Để chạy một công việc định kỳ lúc nửa đêm, bạn sẽ thêm tiền tố vào lệnh hoặc đường dẫn đến tập lệnh của mình bằng:

0 0 * * *

Ví dụ, để chạy /home/youssif/myscript , bạn sẽ sử dụng:

0 0 * * /home/youssif/myscript

trong tệp crontab của bạn.


Để chỉnh sửa tệp crontab của bạn, sử dụng crontab -e để chạy lệnh với tư cách là người dùng hiện tại của bạn. Ngoài ra, nếu bạn thực sự cần chạy lệnh với quyền root, bạn có thể chạy Sudo crontab -e để chỉnh sửa tập tin crontab của bạn.


Để chạy lệnh trong một thiết bị đầu cuối (không phải là ý tưởng hay nếu bạn chạy lệnh với quyền root), bạn sẽ cần chỉ định màn hình sẽ sử dụng trong lệnh hoặc trong tập lệnh của mình. Để làm điều này, giả sử bạn $HIỂN THỊ:0 (mặc định) bạn có thể đặt trước lệnh của mình bằng biến sau:

HIỂN THỊ=:0

Ngoài ra, một thiết bị đầu cuối thường sẽ đóng sau khi lệnh được thực thi nhưng bạn có thể sử dụng tùy chọn giữ với xterm để giữ cho thiết bị đầu cuối mở.

Vì vậy, để chạy lặp lại "xin chào thế giới" trong một nhà ga lúc nửa đêm, lệnh của bạn sẽ trông như thế này:

0 0 * * HIỂN THỊ=:0 xterm -hold -e 'echo "hello world"'

hoặc để chạy tập lệnh của bạn:

0 0 * * HIỂN THỊ=:0 xterm -hold -e '/home/youssif/myscript'

Tuy nhiên, cách tiêu chuẩn để kiểm tra đầu ra của một cronjob là chuyển hướng đầu ra của thiết bị đầu cuối sang một tệp mà bạn có thể xem sau.

Ví dụ: để chuyển hướng đầu ra của thiết bị đầu cuối sang tệp /home/youssif/helloworld.log bạn sẽ sử dụng dòng sau trong tệp crontab của mình:

0 0 * * echo "hello world" > /home/youssif/helloworld.log

Ngoài ra, bạn cũng có thể sử dụng phát bóng lệnh để chuyển hướng đầu ra như thế này:

0 0 * * tiếng vang "xin chào thế giới" | tee /home/youssif/helloworld.log

Cuối cùng, bạn có thể sử dụng con mèo lệnh để xem nội dung của tập tin:

con mèo /home/youssif/helloworld.log

Bằng cách này, lệnh có thể chạy ở chế độ nền nhưng bạn vẫn có thể kiểm tra đầu ra.


Để tắt/bật các tác vụ dựa trên kết quả của một tác vụ đã chạy, tôi nghĩ rằng điều này thực sự sẽ phù hợp hơn cho một câu hỏi riêng biệt. Tôi tin rằng câu trả lời của bạn sẽ liên quan đến việc sử dụng câu lệnh "nếu thì khác" trong tập lệnh bash.


CHỈNH SỬA:

Như @Tcooper đã chỉ ra, chúng ta phải thêm 2>&1 để chuyển hướng tất cả đầu ra, bao gồm cả thông báo lỗi vì vậy bạn có thể muốn sử dụng một cái gì đó như thế này để thay thế:

0 0 * * echo "hello world" 2>&1 > /home/youssif/helloworld.log

hoặc

0 0 * * echo "hello world" 2>&1 | tee /home/youssif/helloworld.log
mchid avatar
lá cờ bo
Tuy nhiên, tôi nghĩ rằng có lẽ ** không nên chạy crontab trong thiết bị đầu cuối với quyền root. Điều này có thể khiến tệp Xmasterity của bạn mất đúng quyền.** Đây có thể không phải là vấn đề với Wayland nhưng tôi không chắc. Đó là một trong nhiều lý do tốt nhất để đầu ra được chuyển hướng đến một tệp.
Youssif Saeed avatar
lá cờ cn
Cảm ơn phản hồi chi tiết của bạn. Tôi đã thử nghiệm nó và nó đang làm việc cho tôi. Đây chính xác là những gì tôi cần để bắt đầu.
TCooper avatar
lá cờ cn
Có lẽ đáng đề cập nếu bạn muốn tất cả đầu ra chuyển đến tệp nhật ký của mình và không ở đâu khác, hãy thêm "2>&1" trong đó 2 là đầu ra Lỗi Tiêu chuẩn và 1 là Đầu ra Tiêu chuẩn. Vì vậy, hãy gửi lỗi đến đầu ra tiêu chuẩn và xuất tất cả vào tệp nhật ký của bạn. Hoặc cách khác, tới hai tệp nhật ký khác nhau: "2>err_log.txt 1>cron_log.txt" - không khai báo điều này mặc định cho email hệ thống đối với các lỗi cron, điều mà tôi thấy ... khó chịu, ít nhất là so với việc sử dụng tệp nhật ký
lá cờ fr
A.L
`0 0 * * echo "hello world" > /home/youssif/helloworld.log` sẽ xóa nhật ký mỗi ngày. Với `>>`, nó sẽ thêm nội dung vào cuối tệp mỗi ngày.
mchid avatar
lá cờ bo
@ A.L Vâng, tôi đã quyết định thực hiện điều đó bởi vì nó giống như mở một thiết bị đầu cuối và cung cấp đầu ra cho một phiên duy nhất. Tôi nghĩ sẽ tốt hơn nếu thêm một ngày vào tiền tố nhật ký và điều đó có vẻ như sẽ làm phức tạp thêm một câu trả lời vốn đã phức tạp.
Điểm:4
lá cờ cn

Tất cả những yêu cầu này có thể được đáp ứng một cách dễ dàng. Cách truyền thống để lên lịch công việc trong linux là crontab. Cách "hiện đại" để lên lịch công việc trong linux là hệ thống. crontab tiếp tục được hỗ trợ trên Ubuntu.

Của bạn Yêu cầu 1: là bất thường: bạn có đang đợi máy tính của mình lúc nửa đêm khi tác vụ bắt đầu không? Mặt khác, đó là lý do tại sao các tệp nhật ký được sử dụng trong linux. Sau đó, quản trị viên hệ thống có thể kiểm tra nhật ký vào ban ngày để kiểm tra xem mọi thứ đã diễn ra như thế nào.

Nếu cần, các công việc có thể được khởi chạy trong trình giả lập thiết bị đầu cuối đồ họa. Tuy nhiên, điều đó yêu cầu bạn phải đăng nhập bất cứ lúc nào, điều này có thể kém lý tưởng hơn từ quan điểm bảo mật.

crontab và/hoặc hệ thống thỏa mãn yêu cầu 2. Bạn thấy danh sách công việc của mình trong đầu ra của đơn vị danh sách systemd hoặc trong crontab tập tin. Bạn có thể bật/tắt/xóa bằng cách hệ thống lệnh hoặc bằng cách xóa/thêm nhận xét # đăng nhập trước nhiệm vụ hoặc xóa hoàn toàn dòng.

Yêu cầu 3 có thể dễ dàng viết kịch bản. Một công việc tiếp theo có thể đọc những gì một công việc trước đó đã thực hiện và hành động tương ứng.

Điểm:0
lá cờ es

Tôi phải nhấn mạnh rằng một số điều bạn đang hỏi khá khác thường và có lý do chính đáng. Ví dụ: chạy một tác vụ đã lên lịch ở nền trước có nghĩa là đầu ra sẽ bị mất khi nó vượt quá bộ đệm cuộn ngược (tức là khả năng lưu trữ "lịch sử đầu ra") của thiết bị đầu cuối của bạn. Đó là lý do tại sao việc gửi đầu ra tới một tệp nhật ký thông thường hơn nhiều thay vì hiển thị nó trực tiếp trong thiết bị đầu cuối và tôi chắc chắn khuyên bạn nên tuân theo quy ước ở đây.

Điều đó đang được nói ... siêu cấp là một công cụ lập lịch tác vụ mà bạn có thể chạy với tư cách là người dùng thông thường (không phải root), ở nền trước, có khả năng ghi đầu ra trực tiếp vào thiết bị đầu cuối. Nó đọc một tệp giống như crontab trong đó bạn có thể chỉ định danh sách các tập lệnh sẽ chạy và thời gian chạy chúng, đồng thời bạn có thể sắp xếp một quy trình tự động nào đó để chỉnh sửa tệp và báo hiệu cho quy trình siêu kiểm soát để nó tiếp nhận các thay đổi . Vì vậy, nó dường như đáp ứng tất cả các yêu cầu của bạn.

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