cron 작업은 어떤 컨텍스트에서 실행됩니까?

cron 작업은 어떤 컨텍스트에서 실행됩니까?

나는 리눅스 박스를 완전히 파괴한 후에 이 질문을 드리고 있습니다. 내가 어디에서 왔는지 알 수 있도록 몇 가지 배경 지식을 알려 드리겠습니다.

나는 현재 Apache에서 Ruby Apps를 실행하기 위해 Phusion Passenger가 추가된 Apache를 실행하는 RedHat Linux 상자를 가지고 있습니다. 이 앱은 정기적으로 신시내티 지역의 키오스크에 캐시된 파일을 제공하는 서비스 역할을 합니다. 웹 앱은 훌륭하게 작동했으며 남은 유일한 부분은 캐시해야 하는 모든 정보를 검색하고 이를 키오스크에 제공하기 위해 몇 가지 다른 업데이트 패키지로 패키징하는 크론 작업을 설정하는 것이었습니다. 이를 달성하기 위해 데이터 가져오기 및 패키징을 처리하는 Ruby 스크립트를 작성했습니다. cron 작업을 설정하기 위해 내장된 crontab을 사용했습니다. 스크립트는 다음과 같습니다.

#!/bin/bash

cd ../lib
ruby pdf_cache.rb
ruby pdf_prepare.rb
ruby rss_cache.rb
ruby nightly-pack.rb 
cd ..
chown -R www.www *

이 스크립트는 cron 폴더에 있으며 디렉토리 구조는 다음과 같습니다.

.
|-- cron
|-- feeds
|-- lib
|   `-- trash
|-- logs
|-- nightly-packs
|-- pdf
|   `-- tank
|-- public
`-- tmp

다음 내용으로 crontab -e실행 했습니다 .root

0 3 * * * /usr/local/apache2/ruby_projects/kiosk/cron/schedule_job

매일 오전 3시에 스크립트를 실행해야 합니다. 이 크론 작업을 예약한 다음 날 매우 불행한 일을 겪었습니다. cron 작업은 루트에서 실행되었으며 chmod -R www.www *시스템의 모든 것에 대한 소유권이 사용자에게 변경된 것을 제외하고 대부분의 명령이 실패했다고 가정합니다 www.

내 질문은 다음과 같습니다. cron 작업을 구현하는 적절한 방법은 무엇이며 cron 작업은 어떤 컨텍스트에서 실행됩니까? 이제 나는 이것을 계정에서 실행해서는 안 된다는 것을 깨달았고 , 해당 사용자에게 셸이 없고 사용자 에게 성공적으로 접근할 수 없기 때문에 계정 root에서 어떻게 실행해야 할지 모르겠습니다 .wwwsuwww

답변1

사용자에게 셸을 제공하고 원격으로 액세스할 수 있는 기능과 권한을 제한할 수 있을 것입니다.

Cron 작업은 Cron 작업을 만든 사용자 아래에서 실행되므로 root.

답변2

또 다른 제안: -e이와 같은 스크립트의 shebang 줄에 추가하십시오(예: #!/bin/bash -e). 이렇게 하면 스크립트의 명령이 실패할 경우 스크립트가 종료됩니다. 불쾌한 놀라움이 발생하지 않을 것이라는 보장은 없지만 스크립트가 완전히 궤도에서 벗어나 실행되는 것을 방지하고 여러 종류의 연쇄 반응 실패를 방지합니다.

답변3

이를 수행하는 올바른 방법은 'su -'입니다. cronjob을 이 사용자로 설정하십시오. 그러면 이 사용자로 실행됩니다. 또는 사용 중인 cron 데몬에 따라 사용자를 정의하는 6번째 필드가 있을 수 있습니다.

도움이 되었기를 바랍니다. 다른 해킹 방법도 있지만 제대로 작동하도록 만드는 것이 항상 가장 좋은 방법입니다.

관련 정보