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

루트로 실행되는 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



답변

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


답변

편집 :이 방법은 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


답변

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사용자가 액세스 할 수 있도록 설정해야 합니다.


답변

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

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

또한보십시오: man runuser


답변

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

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

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

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

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


답변