Tôi đã gặp một vấn đề kỳ lạ với $ RANDOM trong cron. Tôi muốn thực hiện một lệnh một số phút ngẫu nhiên sau khi cronjob kích hoạt.
Ví dụ này hoạt động trực tiếp trong thiết bị đầu cuối và trì hoãn lệnh tối đa 30 giây (thay thế lệnh bằng bất cứ thứ gì bạn muốn, nó thực sự là tiếng vang tới / dev / ttyUSB0):
sleep `expr $RANDOM \% 30` ; command
Nếu cùng một dòng được đặt trong crontab, lệnh sẽ luôn kích hoạt ngay lập tức mà không bị trễ:
* * * * * sleep `expr $RANDOM \% 30` ; command
Nếu tôi sử dụng một biểu thức không có $ RANDOM, nó hoạt động tốt - điều này làm chậm 15 giây:
* * * * * sleep `expr 10 + 5` ; command
Nói cách khác, có vẻ như $ RANDOM không hoạt động trong một cron.
Nhưng nó không chỉ đơn giản vì bản thân $ RANDOM ước tính bằng không, bởi vì sau đó điều này sẽ cho độ trễ là 10:
* * * * * sleep `expr $RANDOM \% 30 + 10` ; command
Tôi cũng đã thử với &&. nhưng điều đó không có ích. Trong thực tế, sau đó lệnh không bắn gì cả!
Tất nhiên tôi có thể đặt độ trễ trong một tập lệnh được gọi từ crontab, nhưng điều đó không giải thích được vấn đề của tôi và không khiến tôi học được :-)
Đó là Debian Lenny nếu điều đó tạo ra sự khác biệt.
/bin/sh
không phải là trình bao thực tế, chỉ đơn thuần là một liên kết tượng trưng đến trình bao ưa thích của sysadmin (thường là bash hoặc dash) trên Debian.