chmod / chown을 수행하는 크론 작업 설정


9

디렉토리 (dropbox 디렉토리)에서 chmod / chown을 기억 적으로 수행하는 cron 작업을 설정하고 싶습니다.

이것은 다음과 같이 수동으로 명령을 실행할 때 작동합니다.

sudo chown -R $USER ~/Dropbox
sudo chmod -R u+rw ~/Dropbox

나는 이것을 다음과 같이 크론 작업으로 변환하려고 시도했다.

10      *       *       *       *       sudo chown -R $USER ~/Dropbox

그러나 그것은 일을하지 않는 것 같습니다.

이것을하는 방법?


incron+ inotify는 더 깨끗한 솔루션이 될 것입니다 :)
franzlorenzon

답변:


9

루트 크론 스크립트 (를 실행 sudo crontab -e하여 편집 )는 다음과 같습니다.

 55 * * * * /bin/chown -R somename /home/somename/Dropbox && /bin/chmod u+rw /home/somename/Dropbox

사용자의 이름이 지정 somename되었고 /home/somename/DropboxDropbox 디렉토리의 전체 경로 라고 가정합니다 . 루트 사용자로서 ~는로 이동합니다 /root.


1
명확한 답변 주셔서 감사합니다! 나는 이것이 내가 찾고있는 누락 된 링크 중 일부를 보여줍니다. 나는 그것을 내일 먼저 테스트 할 것이다 :)
tvgemert

그것을 테스트하고 작동합니다!
tvgemert

2
큰; 그 일을 기쁘게 생각합니다. 수업의 (a)와 같은 환경 변수를 기대하지 않는다 있습니다 $PATHcronjob에있는 사용자에 서명 한 자에게 해당 정의 할을 (예를 들어, 내 linuxbox의 $에 집이 정의되어 있지만, $ PATH로 설정되어 /usr/bin/bin의 crontab과 $ USER에서 이 경우 /binchmod / chown 전에 지정할 필요가 없습니다. ) (b) sudo스크립트에서 피하십시오 (cron 작업을 root사용자 로 실행 ), (c) 루트 사용자 $HOME는 일반 사용자가 아닌 / root를 참조하므로 , (d) ~는 cron 스크립트에서 피해야합니다 (기본적으로 #!/bin/sh.
dr jimbob

이보다 더 복잡한 작업을 수행하는 경우 David의 조언에 따라 스크립트를 작성하는 것이 좋습니다. 스크립트는 chmod / chown의 조합에 대해 과도한 것으로 보입니다. 그러나 다른 사용자의 Dropbox 또는 다른 디렉토리에 적용을 시작하거나 최근에 변경된 파일 (예 : 결과 find) 등 만 스크립트에 넣는 것 이상으로 실행하기로 결정한 경우 .
dr jimbob

16

sudo해야 거의 결코 예약 된 작업에 사용되지 않습니다. 터미널과 통신 할 수있을 것으로 예상되며 그렇게하지 않으려면 특정 플래그가 필요합니다.

대신 cron 작업을 루트로 작성하십시오 (in- /etc/crontab이 파일의 형식은 약간 다릅니다 :). 또한 설치되지 않은 시스템에서 작업 할 수 있다는 이점이 있습니다 .minute hour mday month wdayusercommand
sudo


감사! 나는 이것을 만들었지 만 여전히 확신하지 못한다. 예상 결과를 얻지 못했습니다. 55 * * * * root chown -R somename ~/Dropbox
tvgemert

3
somename어디에나있을 수 있습니다. 상대 경로입니다. 둘째, ~껍질 만 이해합니다. 사용하십시오 $HOME. 다음과 같은 명령을 사용하십시오 : chown -R /some/path/somename $HOME/Dropbox( root's 홈 디렉토리를 사용할 것입니다 ...)
Mei

@David : somename는 경로는 아니지만 사용자 이름 (및 그룹 이름도 포함해야 함 somename:somegroup
:)

5
@tvgemert David가 경로 / 상대 경로 / 기호 경로 ()와 관련하여 위에서 말한 내용 (그리고 그의 대답) ~은 매우 중요 합니다. cron 및 crontab 매뉴얼 페이지에서 시간을 보내고 진행 상황을 이해해야합니다 (의심 할 경우) , Cron 작업을 작성 echo "what you want to do" > /tmp/what-i-would-run하고 결과를보고
제자리에

유용한 팁을 주셔서 감사합니다, 이미 더 많은 통찰력을 주었다!
tvgemert

6

두 가지 문제 :

1) 경로는 일반적으로 로그인 할 때와 같은 방식으로 cron에 설정되지 않습니다. / usr / bin / sudo / bin / chown ... (또는 시스템의 해당 프로그램에 대한 올바른 경로)을 시도하십시오.

2) sudo는 일반적으로 암호를 요청하거나 비 대화식으로 실행하는 것이 행복하지 않을 수 있습니다. 대신 sudo없이 루트의 crontab에 명령을 넣은 다음 명령을 루트로 실행하는 것이 좋습니다.


5

crontab에 여러 가지 문제가 있습니다.

10 * * * sudo chown -R $USER ~/Dropbox

문제 :

  • sudo여기서 사용해서는 안됩니다. 터미널 입력이 필요합니다
  • chown완전히 지정해야합니다 (예 /bin/chown)
  • USER실제 변수가 존재하지 않을 수 있습니다. 일부 시스템 사용LOGNAME
  • ~(물결)은 단지 쉘에 의해 인식됩니다 - 베어 chown뜻을 이해하지
  • 루트의 crontab에서 HOME을 지정하면 루트의 홈으로 이동

실제로 스크립트를 작성했다고 생각합니다.

#!/bin/bash

# FILE: /usr/local/bin/myscript

USER=$1
eval chown -R $1 ~$1/Dropbox
eval chmod -R u+rw ~$1/Dropbox

합니다 (이 eval변환에 필요 ~$1~user 다음/home/user.)

루트의 crontab에서이 스크립트를 실행하십시오.

# root's crontab
10 * * * /usr/local/bin/myscript someuser

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