수정: 아래 다 필요없다. 이게 제일 확실한거 같다.
/etc/crontab 을 열어서
[분] [시] [일] [월] [년] [사용자명] [명령어]
형식으로 하면 된다.
예)
*/30 * * * * daemon php /home/test.php
예제는 user1 유저가 test.sh 를 daemon 유저명의로 실행하기이다.
daemon 은 nginx 가 사용하는 유저이고 비밀번호가 없고 nologin 상태의 유저이다.
우분투는 daemon 이 아니고 nobody 인가 그럴거다.
만약에 비밀번호가 있으면 실행뒤 비밀번호를 물어보기 때문에 crontab 에서는 사용할 수 없다.
비밀번호가 걸려있다면 삭제한다.
[code]
$ passwd -d daemon
[/code]
내 경우엔 웹컨텐츠를 크롤링해서 그누보드에 자동등록해주는 프로그램인데 파일을 다운로드 후 nginx 유저인 daemon 소유로 다운받기 위해 이것이 필요했다.
파일의 소유주가 daemon 유저가 아니라면 웹에서 파일 삭제가 불가능하고 하려해도 그룹변경 등 번거러운 일이 있기 때문에 이렇게 하는게 유용했다.
test.sh
[code]
#!/bin/bash
/usr/local/bin/php -c /etc/php.ini /home/user1/public_html/test.php
[/code]
예제는 user1 폴더의 test.php 를 실행하는 shell 스크립트이다.
crontab -e
[code]
*/30 * * * * su -c ‘/home/user1/test.sh’ -s /bash/sh daemon
[/code]
daemon 유저명의로 test.sh 를 실행한다.
※ nginx 유저로 프로그램 실행
sudo -u nginx ‘/home/test.sh’
다른방법 : 웹서버계정으로 crontab 을 등록한다
// nginx 일 경우
1. nginx 에 등록된 user 찾기
[code]
ps axo user,group,comm | egrep nginx
[/code]
2. 해당 유저로 크론탭을 연다
[code]
crontab -u nginx -e // user 가 nginx 일 경우
[/code]
// 아파치일 경우
1. apache 에 등록된 user 찾기
[code]
ps axo user,group,comm | egrep ‘(apache|httpd)’
[/code]
2. 해당 유저로 크론탭을 연다
[code]
crontab -u apache -e
[/code]