Jak uruchomić zadanie CRON jako określony użytkownik?

66

Chciałbym uruchomić zadanie cron jako określony użytkownik na moim komputerze. Jak mogę określić użytkownika, aby zadanie cron działało jako ?.

Zadania cron będą działały na serwerze (działającym na Ubuntu 10.0.4). „Użytkownicy” to użytkownicy, którzy zostali stworzeni specjalnie do wykonywania określonych zadań po stronie serwera. Ci „użytkownicy” mają następujące wspólne cechy:

  • Nie można zalogować się do systemu
  • Ograniczony dostęp do określonych folderów / plików
morficzny
źródło

Odpowiedzi:

79

Zakładając, że nie możesz się po prostu zalogować i dodać go do pliku crontab tego użytkownika, włóż plik /etc/cron.d. Powinien być sformatowany jako zwykły kronika, ale z dodatkowym polem. Przed uruchomieniem polecenia i po upływie czasu umieść użytkownika. Powinieneś być w stanie znaleźć przykłady już w swoim systemie.

Przykład:

#<timing>   <user> <command>
11 * * * *  root   /usr/lib/command
Daenyth
źródło
Myślę, że to poprawna odpowiedź. Będę musiał poszukać przykładów i zbadać więcej.
morficzny
2
Plus jeden ode mnie, to najlepszy sposób na robienie tego, co chcesz. Dokładniej zajrzyj do pliku / etc / crontab, a zobaczysz, że po szablonie czasu i przed poleceniem jest tam napisany „root”. Oznacza to, że „root” uruchamia te polecenia. Po prostu dodaj własny harmonogram i zamiast „rootowania” użyj dowolnego użytkownika. Zauważ też, że jeśli używasz crontabów dla poszczególnych użytkowników (zgodnie z sugestią Erica D), możesz stracić funkcjonalność całego systemu crontab (/ etc / crontab i /etc/cron.d).
Patkos Csaba
3
Myślę, że najlepszym rozwiązaniem byłoby po prostu crontab -u <user> -etrzymanie wszystkiego w jednym miejscu, co można zrobić jako root. Lubię grupować zadania crona według funkcji, a nie tylko według użytkownika, więc jest to dla mnie preferowane rozwiązanie.
Stuart H
41

Jako root, aby edytować cron użytkownika 1:

crontab -u user1 -e

Możesz także uruchomić polecenie za pomocą:

su user1 -c foo bar

Ale często same skrypty ograniczają własny dostęp, gdy są uruchamiane jako root.

Eric Darchis
źródło
1

Szukałem tego od kilku tygodni i to w końcu zadziałało ...

Utwórz skrypt jako użytkownik 1

ssh user1@ipaddress
nano hourly-event.sh

wprowadź jakieś polecenie

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

sprawiają, że jest wykonywalny

chmod 755 hourly-event.sh

edytuj plik crontab dla użytkownika 1

sudo crontab -u user1 -e

umieść linię na dole, wskazując na twoje skrypty

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

exit - zapisywanie zmian (pokaże katalog / tmp podczas zapisywania ... jest w porządku)

poczekaj na przełom minuty

otwórz swój nowo utworzony plik yay.txt

nano /home/user1/yay.txt

powinieneś teraz mieć otwarte okno nano z „YAY to działa” jako pierwszą i jedyną linią, jeśli w dolnej części okna nano jest napisane Nowy plik ... cóż ... nie wiem

możesz również sprawdzić wpis nowo crontab dla użytkownika1 pod adresem: / var / spool / cron / crontabs / user1

POKÓJ

użytkownik220364
źródło
0

Czasami możesz chcieć, aby użytkownik załadował swoje środowisko, szczególnie gdy używasz „rbenv”, „nvm”, podobnie jak to:

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

(tutaj polecenie source ~/.bash_profilezaładuje środowisko Ruby lub Node.

Siwei Shen 申思维
źródło