Ok, vậy là tôi đã tạo tập lệnh của mình, tôi đã bỏ tập tin vào /etc/cron.hourly
rồi chmod 777
tập tin nhưng nó sẽ không chạy (tự động). Nếu tôi tự chạy nó, nó hoạt động tốt. Tôi có cần phải làm gì khác không?
Ok, vậy là tôi đã tạo tập lệnh của mình, tôi đã bỏ tập tin vào /etc/cron.hourly
rồi chmod 777
tập tin nhưng nó sẽ không chạy (tự động). Nếu tôi tự chạy nó, nó hoạt động tốt. Tôi có cần phải làm gì khác không?
Câu trả lời:
Tại sao không sử dụng crontab (/ etc / crontab) và sử dụng * / 1 trong trường giờ. Tôi đã sử dụng điều này để chạy một kịch bản cứ sau 5 phút và nó hoạt động tốt:
# m h dom mon dow user command
* */1 * * * user command
cron.daily
và bạn bè hoạt động tốt hơn một chút nếu máy không chạy liên tục, vì anacron cố gắng sắp xếp đúng lịch trình trong khi cron đơn giản sẽ không chạy chúng nếu máy không hoạt động cả đêm. Đối với công việc hàng giờ, điều này có lẽ không quan trọng lắm.
/etc/crontab
: cron.daily
, cron.weekly
và cron.monthly
chạy với anacron (nếu có) nhưng hàng giờ run-parts --report /etc/cron.hourly
.
Các mục trong cron.hourly
được chạy theo cơ chế bộ phận chạy ( man run-parts
để biết thêm thông tin). Và run-parts
rất kén chọn về những tên tập tin mà nó cho là hợp lệ.
Ví dụ: cung cấp cho tập lệnh của bạn một phần mở rộng sẽ làm cho nó không hợp lệ và dẫn đến công việc không được chạy. [a-zA-Z0-9_-]
là các ký tự hợp lệ, vì vậy '.' làm cho nó không hợp lệ
Khi thêm một công việc vào /etc/cron.hourly
(hoặc .daily
, .weekly
v.v.), luôn luôn kiểm tra sau đó run-parts
sẽ thực sự chạy nó bằng cách ban hành lệnh:
run-parts --test /etc/cron.hourly
Nếu bằng cách chạy lệnh này, nó hiển thị tệp của bạn, nó có nghĩa là nó đã hoạt động. Mặt khác, nếu không hiển thị bất cứ điều gì tên tệp của bạn không hợp lệ.
Tên của kịch bản của bạn là gì?
giving your script an extension will make it invalid and result in the job not being run
--report
để thực sự chạy các kịch bản.
Vấn đề của bạn có lẽ là do các quyền mở quá mức, cho phép mọi người chỉnh sửa tệp của bạn. Hãy thử 755
thay thế.
Nhìn vào các mục cron trong đầu ra nhật ký hệ thống của bạn sẽ xác nhận điều này.
Câu trả lời của DaithiF phải là câu trả lời đúng.
Ngoài ra, kịch bản của tôi không có #!/bin/bash
trong dòng đầu tiên. Mặc dù tập lệnh có thể được thực thi bằng dòng lệnh, run-parts
từ chối nó nói "Lỗi định dạng Exec".
Thay đổi tên tệp từ scriptname.sh
thành scriptname
và thêm #!/bin/bash
dòng đầu tiên cho phép tập lệnh của tôi chạy hàng giờ.
Khi bạn chạy
crontab -l
nhiệm vụ này có trong danh sách không?
nếu không, thêm nó
crontab -e
thêm dòng này
0 * * * * yourScript
nếu nó nằm trong danh sách này, hãy thử thêm đường dẫn ngôn ngữ lập trình vào đầu tập lệnh của bạn
Thí dụ:
bash: #!/bin/bash
2 điều này luôn giải quyết vấn đề của tôi :)