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