답변:
루트 크론 스크립트 (를 실행 sudo crontab -e
하여 편집 )는 다음과 같습니다.
55 * * * * /bin/chown -R somename /home/somename/Dropbox && /bin/chmod u+rw /home/somename/Dropbox
사용자의 이름이 지정 somename
되었고 /home/somename/Dropbox
Dropbox 디렉토리의 전체 경로 라고 가정합니다 . 루트 사용자로서 ~는로 이동합니다 /root
.
$PATH
cronjob에있는 사용자에 서명 한 자에게 해당 정의 할을 (예를 들어, 내 linuxbox의 $에 집이 정의되어 있지만, $ PATH로 설정되어 /usr/bin
와 /bin
의 crontab과 $ USER에서 이 경우 /bin
chmod / chown 전에 지정할 필요가 없습니다. ) (b) sudo
스크립트에서 피하십시오 (cron 작업을 root
사용자 로 실행 ), (c) 루트 사용자 $HOME
는 일반 사용자가 아닌 / root를 참조하므로 , (d) ~
는 cron 스크립트에서 피해야합니다 (기본적으로 #!/bin/sh
.
find
) 등 만 스크립트에 넣는 것 이상으로 실행하기로 결정한 경우 .
sudo
해야 거의 결코 예약 된 작업에 사용되지 않습니다. 터미널과 통신 할 수있을 것으로 예상되며 그렇게하지 않으려면 특정 플래그가 필요합니다.
대신 cron 작업을 루트로 작성하십시오 (in- /etc/crontab
이 파일의 형식은 약간 다릅니다 :).
또한 설치되지 않은 시스템에서 작업 할 수 있다는 이점이 있습니다 .minute hour mday month wday
user
command
sudo
55 * * * * root chown -R somename ~/Dropbox
somename
어디에나있을 수 있습니다. 상대 경로입니다. 둘째, ~
껍질 만 이해합니다. 사용하십시오 $HOME
. 다음과 같은 명령을 사용하십시오 : chown -R /some/path/somename $HOME/Dropbox
( root
's 홈 디렉토리를 사용할 것입니다 ...)
somename
는 경로는 아니지만 사용자 이름 (및 그룹 이름도 포함해야 함 somename:somegroup
~
은 매우 중요 합니다. cron 및 crontab 매뉴얼 페이지에서 시간을 보내고 진행 상황을 이해해야합니다 (의심 할 경우) , Cron 작업을 작성 echo "what you want to do" > /tmp/what-i-would-run
하고 결과를보고
crontab에 여러 가지 문제가 있습니다.
10 * * * sudo chown -R $USER ~/Dropbox
문제 :
sudo
여기서 사용해서는 안됩니다. 터미널 입력이 필요합니다chown
완전히 지정해야합니다 (예 /bin/chown
)USER
실제 변수가 존재하지 않을 수 있습니다. 일부 시스템 사용LOGNAME
~
(물결)은 단지 쉘에 의해 인식됩니다 - 베어 chown
뜻을 이해하지실제로 스크립트를 작성했다고 생각합니다.
#!/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
incron
+inotify
는 더 깨끗한 솔루션이 될 것입니다 :)