Có cách nào để thêm dòng vào cron của người dùng thông qua tập lệnh không?
Tôi thường làm điều đó bằng cách sử dụng crontab -e
, nhưng tôi muốn tự động hóa tác vụ này với một tập lệnh shell.
Có cách nào để thêm dòng vào cron của người dùng thông qua tập lệnh không?
Tôi thường làm điều đó bằng cách sử dụng crontab -e
, nhưng tôi muốn tự động hóa tác vụ này với một tập lệnh shell.
Câu trả lời:
Bạn có thể lặp lại dòng vào cuối của người dùng hiện tại crontab như thế này:
#!/bin/bash
line="* * * * * /path/to/command"
(crontab -u userhere -l; echo "$line" ) | crontab -u userhere -
cron
đã được thay đổi.
crontab
người dùng đó chưa tồn tại (?)
Nếu bạn muốn chỉnh sửa một giá trị trong crontab của mình, bạn có thể làm gì đó dọc theo dòng:
$ crontab -l | sed -e 's/foo/bar/' | crontab -
Rõ ràng bạn cần cẩn thận với sự thay thế của mình để chắc chắn rằng nó chỉ phù hợp với (các) dòng bạn muốn thay đổi; mặt khác, tất cả foos
được thay đổi thành bars
(trong ví dụ này).
Ưu điểm của phương pháp này là bạn không thay thế toàn bộ crontab. (Một cái nhíp ẩn dụ hơn là một chiếc búa tạ.)
Bạn có thể sử dụng bất kỳ lệnh chỉnh sửa thay vì sed . Ví dụ: nếu bạn muốn sử dụng ed để chỉnh sửa một dòng bắt đầu như thế này:
2 * * * * /sbin/flitch --days 3,4 > /var/log/flitch.out 2>&1
Giả sử dòng này nằm trong số nhiều dòng hoặc bạn có nhiều crontab khác nhau để cập nhật trên các hệ thống khác nhau và bạn chỉ biết dòng của bạn sẽ là dòng duy nhất có thuật ngữ flitch
trong đó.
Nó có thể trông giống như:
$ cat /tmp/edscript
/flitch
s/3/9/
w
q
$ crontab -l > /tmp/out && ed /tmp/out < /tmp/edscript && crontab - < /tmp/out
$ crontab -l
...
2 * * 1 * /sbin/flitch --days 9,4 > /var/log/flitch.out 2>&1
...
Bây giờ tôi phải thừa nhận rằng gần như 100% thời gian sed sẽ làm những gì ed sẽ làm, nhưng thật tốt khi có một công cụ bổ sung trên con dao quân đội Thụy Sĩ. ^. ^