스크립트를 실행할 사용자가 crontab에 지정하는 방법은 무엇입니까? [닫은]


176

루트로 실행되는 crontab 작업이 거의 없지만 문제가 있습니다. 예를 들어 해당 cron 작업을 수행하는 동안 생성 된 모든 폴더는 사용자 루트 및 그룹 루트에 있습니다. 웹 사이트에서 스크립트를 실행할 때 해당 폴더와 파일을 조작 할 수 있도록 사용자 www-data 및 그룹 www-data에서 실행되도록하려면 어떻게해야합니까?

내 서버는 우분투에서 실행됩니다.
현재 crontab 작업은 다음과 같습니다.

*/1 * * * * php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1

답변:


335

루트 사용자로 실행할 crontab을 작성하는 대신 스크립트를 실행하려는 사용자에 대한 crontab을 작성하십시오. 귀하의 경우 crontab -u www-data -ewww-data 사용자의 crontab을 편집합니다. 거기에 전체 명령을 넣고 루트 사용자의 crontab에서 제거하십시오.


54
crontab -e특정 사용자로 사용할 때와 같은 방식으로 작동합니다 .
kulak

7
그러나이 crontab은 시스템 시작시 또는 사용자가 로그인 할 때만 검사됩니까?
Bruno Finger

11
cron* nix 시스템에서는 특정 사용자의 crontab에 지정된 작업을 실행하기 위해 사용자가 로그인 할 필요가 없습니다.
Mike

2
OP가 요청한대로 그룹 ID도 설정합니까? 원하는 그룹이 사용자의 기본 그룹과 다른 경우 어떻게합니까?
askyle

49

편집 :이 방법은 crontab -e에서 작동하지 않지만 / etc / crontab을 직접 편집하는 경우에만 작동합니다. 그렇지 않으면 다음과 같은 오류가 발생할 수 있습니다/bin/sh: www-data: command not found

프로그램 이름 바로 앞에 :

*/1 * * * * www-data php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1

그것은 아파치 사용자 마녀가 www-data 맞습니까?
arma December

19
이 방법은에서 작동하지 crontab -e않지만 /etc/crontab직접 편집하는 경우에만 작동합니다 . 자세한 내용은이 파일의 맨 위에있는 주석을 읽으십시오.
imgx64

5
사용자는 시스템 crontab에서만 지정할 수 있습니다
James Roth

시스템 crontab에서 일정에 몇 가지 작업이 있습니다. 내가 할 때 sudo crontab -e, 나는 직업을 본다. 그러나 /etc/crontab작업이없는 파일을 엽니 다 . 이상한가요? 또한 sudo crontab -e사용자가 지정한 작업을 추가하면 작동합니까?
eNeMetcH 2016 년

14

Ubuntu를 실행하고 있으므로 시스템 crontab은에 있습니다 /etc/crontab.

루트 사용자로서 (또는 sudo를 사용하여)이 파일을 간단히 편집하고이 명령을 실행할 사용자를 지정할 수 있습니다. 시스템 crontab의 항목 형식과 명령을 입력하는 방법은 다음과 같습니다.

# m h dom mon dow user  command
*/1 * * * * www-data php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1

물론 PHP 스크립트 및 로그 파일에 대한 권한은 www-data사용자가 액세스 할 수 있도록 설정해야 합니다.


나는 이것이 이것과 동등해야한다고 생각했다 crontab -e. 하지만.
zinking

5
Ubuntu 문서는 / etc / crontab을 업데이트로 덮어 쓸 수 있으므로 편집하지 않는 것이 좋습니다. crontab -e는 / var / spool / cron / crontabs에 사용자 별 cron 파일을 만듭니다.
Hemm

9

또한 사용하여 시도 할 수 있습니다 runuser다른 사용자로 명령을 실행 (루트로)

*/1 * * * * runuser php5 \
            --command="/var/www/web/includes/crontab/queue_process.php \
                       >> /var/www/web/includes/crontab/queue.log 2>&1"

또한보십시오: man runuser


runuser우분투에는 포함되어 있지 않습니다.
랩터

1
runuser는 최신 버전의 Ubuntu에 있습니다. 이 답변 unix.stackexchange.com/questions/169441/ubuntu-runuser-command (예 : su 및 sudo) 에서 설명한대로 runuser에 대한 대안이 있습니다 .
Russell E Glaue

8

Mike의 제안은 "올바른 방법"처럼 들립니다. vncserver재부팅 할 때 실행할 사용자를 지정 하고이 모든 cron 작업을 한곳에 유지 하려고이 스레드를 발견했습니다 .

VNC cron에 대해 다음 오류가 발생했습니다.

vncserver: The USER environment variable is not set. E.g.:

제 경우 sudo에는 작업을 실행할 사람을 지정하는 데 사용할 수있었습니다 .

@reboot sudo -u [someone] vncserver ...

1
로그에 다음 메시지가 표시됩니다.sudo: sorry, you must have a tty to run sudo
Renato Gama

@renatoargh 아마도 RedHat에서 실행 중일 것입니다. Unix.SE 에서이 답변 을 살펴보십시오.
카이저
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.