crontab chạy như một người dùng cụ thể


18

Tôi cần chạy một kịch bản hàng ngày. Tập lệnh nên được chạy dưới dạng người dùng cụ thể (ví dụ: user1) chứ không phải là root. Vì vậy, tôi đặt tệp cron tại /etc/cron.d và đặt tên người dùng trong dòng (cột thứ 2). Nhưng nó đưa ra một lỗi nói rằng lệnh không được tìm thấy. Tôi nghi ngờ rằng tập lệnh không chạy như môi trường của user1. Tôi đã bỏ lỡ một cái gì đó?


3
Bạn có thể chỉ cho chúng tôi mục crontab bạn đang sử dụng không?
user9517 được hỗ trợGoFundMonica

Câu trả lời:


31

Chỉ /etc/crontabvà các tệp trong /etc/cron.d/có một trường tên người dùng. Trong tập tin đó bạn có thể làm điều này:

1 1 * * * username /path/to/your/script.sh

Từ crontab của root, sudo crontab -ebạn có thể sử dụng:

1 1 * * * su username -c "/path/to/your/script.sh"

Hoặc bạn có thể sử dụng crontab thực tế của người dùng như thế này:

sudo crontab -u username -e

Các cột thứ hai trong bất kỳ tập tin crontab là trong một giờ mà bạn muốn công việc để chạy tại. Ý bạn là lĩnh vực thứ sáu?


Tệp trong /etc/cron.d lấy một đối số người dùng: help.ubfox.com/community/CronHowto#Advified_Crontab và tại sao bạn lại thực hiện "sudo su" nếu bạn đang thực thi với quyền root? Trong mọi trường hợp, bạn sẽ muốn "su -l" sử dụng môi trường đăng nhập cho người dùng, vì đây rất có thể là sự cố PATH, từ mô tả sự cố.
cjc

Không phải các tệp trong /etc/cron.d là phần mở rộng của / etc / crontab? Trên các hệ thống, tôi phải trao tất cả các tệp trong /etc/cron.d có tên người dùng được chỉ định.
user9517 được hỗ trợGoFundMonica

À, thực sự. /etc/cron.d/tập tin một phần của /etc/crontab. sudocũng là vô nghĩa. Tôi sẽ xóa phần đó.
Ladadadada

2
Về việc đưa sudo vào crontab: (a) sudo su... nói chung là không cần thiết; sudo -u <user> <command>thường là đủ (b) sudo sẽ bị sặc trên một số hệ thống nếu không có TTY kèm theo (chẳng hạn như khi chạy bằng cron). Điều đó có thể được sửa trong tập tin sudoers của bạn.
tylerl

4

Bạn có thể cần đặt PATH cho người dùng đó, nếu tệp thực thi bạn đang sử dụng nằm trong, giả sử, / usr / local / bin. Để đặt PATH, hãy đặt một cái gì đó như thế này trước các cronjobs:

PATH=/bin:/usr/bin:/usr/local/bin

*/5 * * * * user1 sample_executable

Một cách khác là chỉ định đầy đủ đường dẫn đến sample_executable trong cronjob của bạn, vì vậy:

*/5 * * * * user1 /path/to/sample_executable

Nếu sample_executable đề cập đến các tệp thực thi không có trong PATH tiêu chuẩn, bạn nên sử dụng tùy chọn đầu tiên.


1

Thư mục điển hình cho người dùng crontabs là trong / var / spool / cron / crontabs. Định dạng tệp là định dạng không bao gồm tên người dùng. Người dùng crontabs được sở hữu bởi người dùng và được đặt tên theo người dùng với chế độ 0600. Điều này được xử lý tốt nhất bằng cách viết tệp tab của bạn và sử dụng crontab -u username filenameđể thiết lập bất kỳ mục cron nào bạn muốn cho người dùng đó.

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.