Câu trả lời:
Bạn không thể lên lịch công việc cứ sau mười giây, nhưng tôi cho rằng bạn có thể sắp xếp công việc để chạy mỗi phút và ngủ theo vòng trong khoảng thời gian 10 giây. Điều này sẽ được xác định khi lệnh của bạn được hoàn thành trước khi khoảng thời gian mười giây hết hạn, hoặc bạn sẽ bị chồng chéo khi lệnh tiếp theo chạy. Điều này cảm thấy giống như một giải pháp bấp bênh, nhưng nếu bạn có thể đảm bảo thực thi rất ngắn lệnh chính của tập lệnh, nó sẽ hoạt động.
#!/bin/bash
i=0
while [ $i -lt 6 ]; do
/run/your/command &
sleep 10
i=$(( i + 1 ))
done
Tôi đã có một nhiệm vụ tương tự tuần trước. Giải pháp của tôi là nhân các mục cron tiêu chuẩn với tần số mong muốn. Crontab của tôi trông như:
* * * * * /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 10; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 20; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 30; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 40; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 50; /usr/local/bin/php /var/www/myscript.php
Nếu bạn muốn kiểm tra kết quả của myscript.php, ví dụ để gỡ lỗi, chỉ cần nối thêm
&> /tmp/myscipt.log
đến từng dòng trong crontab ở trên. Sau đó, thiết bị xuất chuẩn và thiết bị xuất chuẩn sẽ được chuyển hướng đến tệp nhật ký.
Tôi sẽ sử dụng Monit và đặt thời gian chu kỳ thành 10 giây. Đây là một cách sạch để quản lý điều này bên ngoài hệ thống cron.
Tôi làm điều này với các tập lệnh nhất định cần chạy trong khoảng thời gian 15 giây.
Xem: Làm thế nào để thực hiện sao lưu liên tục / liên tục của nhóm zfs?
Nếu bạn muốn đi phụ 10 giây, ví dụ 5 giây, tôi khuyên bạn nên tạo một vòng lặp worker với một đoạn script nhỏ như thế:
#!/bin/bash
INTERVAL=5
while true; do
echo "do something"
# wait for next interval
WAIT_UNTIL=$(($(date +%s) + $INTERVAL))
while [ $(date +%s) -lt $WAIT_UNTIL ]; do
sleep 1
done
done
Nếu bạn cần đi phụ thứ hai, hãy thêm micro giây vào lệnh ngày.
* * * * * script to run
* * * * * sleep 10; script to run
* * * * * sleep 20; script to run
Ở đây, kịch bản có thể được chạy với độ dài 10 giây ...