回答:
ルート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
ます。
$PATH
cronjobでサインインしたユーザーの環境変数と同等に定義されるような環境変数を期待しない(たとえば、私の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 wday
user
command
sudo
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
よりクリーンなソリューションになります:)