특정 사용자로 실행중인 crontab


19

매일 스크립트를 실행해야합니다. 스크립트는 루트가 아닌 특정 사용자 (예 : user1)로 실행해야합니다. 그래서 cron 파일을 /etc/cron.d에 넣고 사용자 이름을 줄 (2 번째 열)에 넣습니다. 그러나 명령을 찾을 수 없다는 오류가 발생합니다. 스크립트가 user1의 환경으로 실행되지 않은 것 같습니다. 내가 뭐 놓친 거 없니?


3
사용중인 crontab 항목을 알려주시겠습니까?
user9517

답변:


33

/etc/crontab파일 에만 /etc/cron.d/사용자 이름 필드가 있습니다. 해당 파일에서 다음을 수행 할 수 있습니다.

1 1 * * * username /path/to/your/script.sh

루트의 crontab에서 sudo crontab -e다음을 사용할 수 있습니다.

1 1 * * * su username -c "/path/to/your/script.sh"

또는 다음과 같이 사용자의 실제 crontab을 사용할 수 있습니다.

sudo crontab -u username -e

crontab 파일 의 두 번째 열 은 작업을 실행할 시간입니다. 여섯 번째 필드를 의미 했습니까?


/etc/cron.d의 파일에는 help.ubuntu.com/community/CronHowto#Advanced_Crontab 이라는 사용자 인수 가 있으며 루트로 실행하는 경우 "sudo su"를 수행하는 이유는 무엇입니까? 어쨌든 "su -l"은 사용자의 로그인 환경을 사용하기를 원할 것입니다. 문제 설명에서 PATH 문제 일 가능성이 큽니다.
cjc

/etc/cron.d의 파일 확장자가 / etc / crontab이 아닙니까? 시스템에서 /etc/cron.d의 모든 파일을 사용자 이름으로 지정해야합니다.
user9517

아 참으로. /etc/cron.d/파일 은의 일부입니다 /etc/crontab. sudo또한 무의미합니다. 그 부분을 제거하겠습니다.
Ladadadada

2
crontab에 sudo를 넣는 것과 관련하여 : (a) sudo su... 일반적으로 불필요합니다. sudo -u <user> <command>일반적으로 충분합니다. (b) sudo는 TTY가 연결되지 않은 경우 (예 : cron에 의해 실행되는 경우) 일부 시스템에서 질식합니다. sudoers 파일에서 수정 될 수 있습니다.
tylerl

4

사용중인 실행 파일이 / usr / local / bin에있는 경우 해당 사용자의 PATH를 설정해야 할 수도 있습니다. PATH를 설정하려면 cronjobs에 다음과 같이 입력하십시오.

PATH=/bin:/usr/bin:/usr/local/bin

*/5 * * * * user1 sample_executable

다른 방법은 cronjob에서 sample_ executable의 경로를 완전히 지정하는 것입니다.

*/5 * * * * user1 /path/to/sample_executable

sample_ executable이 표준 PATH에없는 실행 파일을 참조하는 경우 첫 번째 옵션을 사용해야합니다.


1

사용자 crontab의 일반적인 디렉토리는 / var / spool / cron / crontabs에 있습니다. 파일 형식은 사용자 이름이 포함되지 않은 형식입니다. 사용자 crontab은 사용자가 소유하고 모드 0600을 가진 사용자의 이름을 따서 명명됩니다. 이것은 탭 파일을 작성 crontab -u username filename하고 해당 사용자에 대해 원하는 cron 항목을 설정 하는 데 가장 잘 처리됩니다 .

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