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ś?

Sam Kong
źródło
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?

Ladadadada
źródło
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.

cjc
źródło
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.

Jeff Ferland
źródło