Làm thế nào để chạy một công việc định kỳ như một người dùng cụ thể?


66

Tôi muốn chạy một công việc định kỳ như một người dùng cụ thể trên máy của tôi. Làm cách nào tôi có thể chỉ định người dùng cho một công việc định kỳ để chạy như?

Các công việc định kỳ sẽ chạy trên máy chủ (chạy trên Ubuntu 10.0.4). 'Người dùng' là những người dùng đã được tạo riêng để thực hiện các tác vụ phía máy chủ cụ thể. Những 'người dùng' này có những điểm chung sau:

  • Không thể đăng nhập vào hệ thống
  • Có quyền truy cập hạn chế vào các thư mục / tệp cụ thể

Câu trả lời:


79

Giả sử bạn không thể đăng nhập và thêm nó vào crontab của người dùng đó, hãy đặt một tệp vào /etc/cron.d. Nó nên được định dạng như một cronjob bình thường, nhưng có thêm một trường. Trước lệnh chạy và sau thời gian, đặt người dùng. Bạn sẽ có thể tìm thấy các ví dụ đã có trên hệ thống của bạn.

Thí dụ:

#<timing>   <user> <command>
11 * * * *  root   /usr/lib/command

Tôi nghĩ rằng đây là câu trả lời chính xác. Tôi sẽ phải tìm một số ví dụ và điều tra thêm.
morpheous

2
Thêm một từ tôi, đây là cách tốt nhất để làm những gì bạn muốn. Chính xác hơn hãy xem trong tập tin / etc / crontab và bạn sẽ thấy, sau mẫu thời gian và trước lệnh có "root" được viết ở đó. Điều này có nghĩa là "root" chạy các lệnh đó. Chỉ cần thêm lịch trình của riêng bạn và thay vì "root" sử dụng bất kỳ người dùng. Ngoài ra, lưu ý rằng nếu bạn sử dụng cho mỗi người dùng crontabs (như được giới thiệu bởi Eric D), bạn có thể mất chức năng của crontab trên toàn hệ thống (/ etc / crontab và /etc/cron.d).
Patkos Csaba

3
Giải pháp tốt nhất tôi đoán sẽ là chỉ crontab -u <user> -egiữ mọi thứ ở một nơi, mà bạn có thể làm như root. Tôi thích nhóm các công việc định kỳ của mình theo chức năng, mặc dù, thay vì chỉ theo người dùng, vì vậy đây là giải pháp thích hợp hơn cho tôi.
Stuart H

41

Là root, để chỉnh sửa cron của user1:

crontab -u user1 -e

Bạn cũng có thể bắt đầu lệnh của mình với:

su user1 -c foo bar

Nhưng thông thường, các tập lệnh tự giảm quyền truy cập của chúng khi bắt đầu bằng root.


1

Tôi đã tìm kiếm điều này trong một vài tuần và điều này cuối cùng đã hoạt động ...

Tạo tập lệnh của bạn dưới dạng user1

ssh user1@ipaddress
nano hourly-event.sh

nhập một số lệnh

#!/bin/bash
echo "YAY it works" > /home/user1/yay.txt

làm cho nó thực thi

chmod 755 hourly-event.sh

chỉnh sửa crontab cho user1

sudo crontab -u user1 -e

đặt một dòng ở dưới cùng chỉ vào (các) tập lệnh của bạn

# m h  dom mon dow   command
*   *   *   *   *    bash ./hourly-event.sh

thoát - lưu thay đổi (nó sẽ hiển thị thư mục / tmp khi lưu ... không sao)

chờ đến lượt

mở yay.txt mới tạo của bạn

nano /home/user1/yay.txt

Bây giờ bạn sẽ mở một cửa sổ nano với "YAY nó hoạt động" là dòng đầu tiên và duy nhất nếu dưới cùng của cửa sổ nano của bạn nói Tệp mới ... tốt .. tôi không biết

bạn cũng có thể kiểm tra mục nhập crontab mới của mình cho user1 tại: / var / spool / cron / crontabs / user1

SỰ THANH BÌNH


0

Đôi khi bạn có thể muốn người dùng tải môi trường của mình, đặc biệt là khi sử dụng "rbenv", "nvm", như thế này:

0 0 * * * source ~/.bash_profile && cd /opt/app/current && bundle exec ruby ...

(ở đây lệnh source ~/.bash_profilesẽ tải cho bạn môi trường Ruby hoặc Node.

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.