回答:
ルートcronスクリプト(を実行して編集sudo crontab -e)を次のようにします。
55 * * * * /bin/chown -R somename /home/somename/Dropbox && /bin/chmod u+rw /home/somename/Dropbox
ユーザーに名前が付けられていてsomename、それ/home/somename/DropboxがDropboxディレクトリの完全パスであると仮定します。rootユーザーとして、〜はに移動し/rootます。
$PATHcronjobでサインインしたユーザーの環境変数と同等に定義されるような環境変数を期待しない(たとえば、私のlinuxboxで$ HOMEが定義されているが、$ PATHがcrontabおよび$ USER /usr/binとの間で設定されている/binが定義されていないため、この場合/bin、chmod / chownの前に指定する必要はありませんでした)、(b)sudoスクリプトで回避(rootユーザーとしてcronタスクを実行)、(c)rootユーザー$HOMEは通常のユーザーではなく/ rootを参照するため、(d)は~、デフォルトの実行によって(cronスクリプトでは避けるべきである#!/bin/sh。
find)だけで実行することにした場合などは、スクリプトを挿入するのが理にかなっています。
sudoスケジュールされたタスクで使用することはほとんどあり ません。端末と通信できることを期待しており、そうすることを避けるために特定のフラグが必要です。
代わりに、rootとしてcronジョブを作成します(/etc/crontabこのファイルの形式は若干異なります :)。
これには、がインストールされていないシステムで作業できるという利点もあります。minute hour mday month wdayusercommandsudo
55 * * * * root chown -R somename ~/Dropbox
somenameどこでもかまいません。相対パスです。第二に、~シェルによってのみ理解されます。使用します$HOME。次のようなコマンドchown -R /some/path/somename $HOME/Dropboxを使用します(これはrootのホームディレクトリを使用します...)
somenameはパスではありませんが、ユーザー名(およびグループ名も含む必要があります:somename:somegroup);)
~ている)非常に重要な cronとcrontabのmanページにいくつかの時間を費やすと、必ず疑問がある場合は(何が起こっているかを理解してください- 、echo "what you want to do" > /tmp/what-i-would-run結果を実行して結果が正しいことを確認するcronジョブを作成します-宇宙を破壊する可能性は
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よりクリーンなソリューションになります:)