Tại sao crontab này không hoạt động?


-1

Tôi là người mới bắt đầu crontab. Tại sao crontab này không làm gì? Tôi muốn nó chạy kịch bản mỗi phút.

1 * * * * /home/android/test.sh

Nếu tôi chỉ gõ /home/android/test.sh trong shell thì nó hoạt động để tập lệnh tự hoạt động.

Ai đó đề nghị đây là một bản dupe, nhưng tôi không nghĩ nó là. Theo như tôi có thể nói, crontab này sẽ hoạt động, nhưng nó không hoạt động. 1 có nghĩa là một lần một phút theo như tôi biết, hãy sửa tôi nếu tôi sai.

Đây là những gì kịch bản test.sh làm, chỉ đơn giản là:

ngày >> /home/android/date.txt

Nó hoạt động khi tôi tự chạy nhưng không được chạy tự động bởi crontab.


Tôi chắc chắn rằng nó hoạt động. Bạn đã đợi đến 1 phút trước giờ?
Arjan

Vâng, tôi đã thử nghiệm nó nhiều lần. Nếu tôi chỉ gõ /home/android/test.sh trong shell thì nó hoạt động để tập lệnh tự hoạt động. Đầu ra nên xuất hiện trực tiếp trong thiết bị đầu cuối hoặc ở nơi khác?
poko

Bạn đã đợi vài giờ cho đến 1 phút trước giờ ...? (Gợi ý.)
Arjan

Vâng. Trong chính kịch bản, tôi yêu cầu ngày >> date.txt. Vì vậy, nối ngày vào tệp date.txt. Điều này hoạt động khi tôi chạy tập lệnh theo cách thủ công, nhưng cho dù tôi có đợi bao nhiêu giờ, dường như crontab sẽ không chạy tập lệnh.
poko

Được rồi, rất rõ ràng: bạn có biết crontab này được thiết lập để chỉ chạy lúc 1 phút trước giờ không? Vui lòng sử dụng "chỉnh sửa" để làm rõ điều đó trong câu hỏi của bạn.
Arjan

Câu trả lời:


1

Vì tôi không biết kịch bản của bạn làm gì, có thể nó hoạt động, nhưng bạn không thấy đầu ra của nó. Để thực sự thấy một cái gì đó, bạn có thể chuyển hướng đầu ra của nó thành một tệp:

* * * * * (/home/android/test.sh > /tmp/cron-out.txt)

Sau đó, bạn có thể kiểm tra xem đầu ra có phải là những gì bạn dự định có.

Ngoài ra, bạn có thể xem nhật ký hệ thống của mình (một số hệ thống có đăng nhập chuyên dụng /var/log/cron).

Nếu điều đó cũng không giúp được gì, bạn có thể kiểm tra xem người dùng mà bạn thực thi lệnh có tất cả các quyền cần thiết để thực thi tập lệnh hay không, đọc đầu vào và viết đầu ra.

Để thực thi tập lệnh mỗi phút, bạn phải thay thế 1 * * * *bằng * * * * *, 0-59 * * * *hoặc */1 * * * *. Cài đặt bạn cung cấp sẽ chỉ thực hiện mỗi giờ vào phút 1 (ví dụ: 9:01, 10:01, ...).

Đảm bảo rằng tất cả các quyền được đặt đúng chỗ:

  1. Người dùng nên thực thi tập lệnh phải là chủ sở hữu (u), trong nhóm (g) của tệp hoặc quyền cho "người khác" (o) phải được đặt tương ứng. Để đặt người dùng android là chủ sở hữu của tệp sudo chown android /home/android/test.sh. Để thay đổi nhóm tệp thành yourgroup, bạn có thể sử dụng chgrp yourgroup /home/android/test.sh(theo giả định rằng người dùng Android của bạn nằm trong nhóm yourgroup).
  2. Tùy thuộc vào cách bạn muốn cấp cho người dùng quyền, bạn nên sudo chmod u+rx /home/android/test.sh(Ví dụ cho người dùng thực thi là chủ sở hữu - đối với các trường hợp khác thay thế ubằng ghoặc o).
  3. Tạo một crontab cho người dùng android. Hoặc là androidngười dùng tự thực thi crontab -ehoặc với bất kỳ người dùng quản trị nào khác sudo crontab -u android -e.

Tôi đã chỉ định ở trên nội dung của tập lệnh test.sh vừa rồi.
poko

Vấn đề là, test.sh hoạt động khi tôi chạy thủ công nhưng không chạy bằng cron.
poko

Ok, người dùng bạn thiết lập crontab có quyền đọc và thực thi tập lệnh và ghi vào tệp được chỉ định không?
duelle

1
@duelle, crontab được chạy mỗi giờ (một phút sau giờ), không phải mỗi phút như người hỏi câu hỏi muốn. Xem bản sao.
Arjan

@Arjan: bạn nói đúng. @poko: Để thực thi kịch bản của bạn mỗi phút, mục crontab của bạn sẽ giống như thế này:* * * * * /home/android/test.sh
duelle
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.