crontab działający jako określony użytkownik


20

Muszę codziennie uruchamiać skrypt. Skrypt powinien być uruchamiany jako określony użytkownik (np. Użytkownik1), a nie jako root. Więc umieściłem plik cron na /etc/cron.d i umieściłem nazwę użytkownika w linii (druga kolumna). Ale daje błąd, mówiąc, że polecenie nie zostało znalezione. Podejrzewam, że skrypt nie został uruchomiony jako środowisko użytkownika user1. Przegapiłem coś?


3
Czy możesz nam pokazać wpis w crontab, którego używasz?
user9517

Odpowiedzi:


34

Tylko /etc/crontabpliki w /etc/cron.d/polu mają nazwę użytkownika. W tym pliku możesz to zrobić:

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

Z crontab root'a sudo crontab -emożesz użyć:

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

Lub możesz użyć rzeczywistego crontab użytkownika w następujący sposób:

sudo crontab -u username -e

Druga kolumna w dowolnym pliku crontab jest na godzinę, że chcesz pracować na pracę. Miałeś na myśli szóste pole?


Plik w /etc/cron.d weź argument użytkownika: help.ubuntu.com/community/CronHowto#Advanced_Crontab i dlaczego robisz „sudo su”, jeśli wykonujesz jako root? W każdym razie będziesz chciał, aby „su -l” używał środowiska logowania dla użytkownika, ponieważ jest to najprawdopodobniej problem ze ŚCIEŻKĄ, na podstawie opisu problemu.
cjc

Czy pliki w /etc/cron.d nie są rozszerzeniem / etc / crontab? W systemach muszę przekazać wszystkie pliki w /etc/cron.d, podając nazwę użytkownika.
user9517

Ach, rzeczywiście. /etc/cron.d/pliki częścią /etc/crontab. sudojest również bezcelowe. Usunę tę część.
Ladadadada,

2
W odniesieniu do umieszczania sudo w crontab: (a) sudo su... jest ogólnie niepotrzebne; sudo -u <user> <command>zwykle wystarcza. (b) sudo będzie dławić się na niektórych systemach, jeśli nie ma dołączonego TTY (na przykład podczas uruchamiania przez crona). Można to naprawić w pliku sudoers.
tylerl

4

Może być konieczne ustawienie PATH dla tego użytkownika, jeśli plik wykonywalny, którego używasz, znajduje się w, powiedzmy, / usr / local / bin. Aby ustawić ŚCIEŻKĘ, umieść coś takiego przed cronjobs:

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

*/5 * * * * user1 sample_executable

Innym sposobem jest pełne określenie ścieżki do sample_executable w twoim cronjob, więc:

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

Jeśli sample_executable odwołuje się do plików wykonywalnych spoza standardowej PATH, powinieneś użyć pierwszej opcji.


1

Typowy katalog dla crontabs użytkownika to / var / spool / cron / crontabs. Format pliku to ten, który nie zawiera nazwy użytkownika. Crontabs użytkownika są własnością użytkownika i nazwane na cześć użytkownika w trybie 0600. Najlepiej jest to zrobić, pisząc plik tab i używając crontab -u username filenamedo skonfigurowania dowolnych wpisów cron dla tego użytkownika.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.