crontab 실행시 다른 유저로 실행 > IT 기술백서

IT 기술백서

직접 알아내거나 검색하기 귀찮아서 모아 둔 것

Server | crontab 실행시 다른 유저로 실행

본문

수정: 아래 다 필요없다.  이게 제일 확실한거 같다.

 

/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]

댓글 0개

등록된 댓글이 없습니다.

Menu