crontab을 사용자로 실행하는 방법 : www-data?


32

LAMP가 작동하도록 설정 user:www-data되었으며 모든 파일과 폴더가 해당 권한으로 생성됩니다.

crontab을 user @ ubuntu로 설정했습니다.

그래서 나는 crontab -e이 명령을 사용하고 사용합니다 :

*/5 * * * * php /var/www/public/voto_m/artisan top >/dev/null 2>&1

기본적으로 해당 명령은 지정된 위치에 캐시 파일을 생성하지만 (문제는 없습니다) 해당 캐시 파일은 user : user 권한으로 생성되지 않습니다. user:www-data .

기본적으로 user:www-data권한이있는 파일을 만들려면 어떻게해야합니까?
갈 수 없으며 chown파일이 다시 생성 될 때마다.

감사.


www-data (예 : for awstats또는 php5sessionclean) 로 실행되는 일부 crontab 스크립트 는 /etc/cron.*디렉토리에 있으므로 crontab -e( www-data 사용자를 지정할 때도) 볼 수 없습니다 .
Skippy le Grand Gourou

답변:


40

시스템 crontab에 항목을 쓸 수 있습니다 /etc/crontab 은 사용자를 다음과 같이 실행할 (일반적으로 루트이지만 www-data 일 수 있음) 지정하는 추가 인수를 취합니다.

당신의 라인은 :

*/5 * * * * www-data php /var/www/public/voto_m/artisan top >/dev/null 2>&1

또는 다음을 사용하여 사용자 www-data의 crontab을 편집 할 수 있습니다 su.

sudo su -c "crontab -e" www-data

1
실제로 두 번째 옵션은 대부분의 우분투 버전에서 작동하지 않습니다
user123

두 번째 옵션은 12.04LTS에서 작동합니다. 아마도 이후 버전에는 없을까요?
mivk

1
두 번째 옵션은 14.04에서 작동하지 않습니다
dgoosens

관리의 용이성을 위해, 라인도에 자신의 파일에 넣을 수있는 /etc/cron.d설명이 포함 된 이름으로 예를 들어 , /etc/cron.d/artisan.
fkraiem

2
두 번째 옵션은 대신 시도해보십시오sudo su -c "crontab -e" www-data -s /bin/bash
Lunfel

51

-u인수 와 함께 crontab을 실행 하여 특정 사용자의 crontab을 편집 할 수도 있습니다 .

sudo crontab -u www-data -e

이것은 14.04에 작동
dgoosens

3

www-data 사용자로 crontab을 실행하려면 다음 명령을 사용할 수 있습니다.

crontab -u www-data -e

그런 다음 15 분마다 PHP 파일을 실행하는 행을 작성하십시오.

*/15  *  *  *  * php -f /path_to_cron/cron.php

저장하면 편집기가 요청합니다.

File Name to Write: /tmp/crontab.HMpG7V 

걱정하지 마세요. crontab -e실제 crontab 대신 / tmp에서 파일을 열어 새 crontab에 오류가 있는지 확인하고 실제 crontab을 해당 오류로 덮어 쓰지 못하게 할 수 있습니다. 오류가 없으면 실제 crontab이 업데이트됩니다. crontab -e가 실제 crontab에 바로 쓰면 전체 crontab을 날려 버릴 위험이 있습니다.

cronjob이 실행 중인지 확인하기 위해 cron 로그를 확인할 수 있습니다. 일반적으로 /var/log/cron.log에 있거나 다음 명령을 실행합니다.

crontab -u www-data -l

이것은 우분투에서 나를 위해 일했다
tristanbailey

이것은 4 년 전에 코드 커맨더에 의해 이전에 정확하고 간결하게 응답되었습니다. "sudo"사용을 생략했습니다. cron 라인의 형식과 관련하여 요청하지 않은 정보를 던졌습니다.
HörmannHH

@RichieHH, 왜 sudo를 추가해야합니까? 사용자가 아직 루트로 실행하고 있지 않다고 누가 말했습니까? 이 명령을 사용하는 사람은 권한이있는 명령을 실행해야하는 경우 sudo를 사용하여 명령을 실행해야한다는 것을 알기에 충분한 지식이 있어야합니다. 그렇지 않으면 더 이상 손대지 마십시오. 코드 사령관은 방금 명령을 입력했지만 더 이상 정보를 제공하지 않았습니다
spacebiker

.. 당신이 그렇게 똑똑하다면, 다른 사람들의 일을 비판하는 대신에 대답을하는 것이 더 나을 것입니다. 그러면 아마도 명성을 얻기 시작할 것입니다.
spacebiker

-1

다른 접근법을 추가하고 싶습니다. 다른 사람들이 언급했듯이 우분투 (여기 16.04)와 www-data crontab은 신뢰할 수없는 것 같습니다 (아마도 보안상의 문제입니까?).

어쨌든, 우리 회사에서는 모든 cronjob을 서버에 쉽게 액세스 할 수 있기를 원하므로 아무것도 놓치지 마십시오. 동시에 우리는 모든 것을 루트로 실행하고 싶지 않습니다.

따라서 우리는 실행

sudo crontab -e 

평소와 같이 명령을 다음과 같이 지정합니다.

* * * * * /bin/su - www-data -s /bin/bash -c '/path/to/command'

루트 cronjobs 파일에 cronjob을 유지하면서 / path / to / command를 www-data로 실행합니다 (항상 올바르게 실행 됨). 파이프를 사용하여 로그 파일을 루트 (최대 보안 용)로 작성할 수 있다는 이점이 있습니다.

선호하는 쉘을 전달하고 있으며, 더 간단한 쉘의 경우 / bin / sh 일 수도 있습니다 (우리는 전체 bash 기능과 같습니다). Www-data에는 쉘이 지정되어 있지 않으므로 쉘이 없으면 오류가 발생합니다. 일반적으로 cron은 / bin / sh로만 작업을 실행합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.