ディレクトリ(ドロップボックスディレクトリ)でchmod/chownを繰り返し行うcronジョブをセットアップしたいと思います。
これは、次のようにコマンドを手動で実行すると機能します。
Sudo chown -R $USER ~/Dropbox
Sudo chmod -R u+rw ~/Dropbox
私はそれを次のようなcronジョブに変換しようとしました:
10 * * * * Sudo chown -R $USER ~/Dropbox
しかし、それは仕事をしていないようです。
これを行う方法?
ルート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
に移動します。
Sudo
すべきほとんど決してスケジュールされたタスクで使用されます。端末と通信できることを期待しており、そうすることを避けるために特定のフラグが必要です。
ルートとしてcronジョブを作成します(/etc/crontab
内)-このファイルの形式は少し異なります:minute hour mday month wday
user
command
)代わりに。
これには、Sudo
がインストールされていないシステムで作業できるという利点もあります。
2つの問題:
1)パスは通常、ログイン時と同じようにcronで設定されません。/usr/bin/Sudo/ bin/chown ...(またはシステム上のこれらのプログラムへの適切なパスであれば何でも)を試してください。
2)通常、sudoはパスワードを要求します。そうしないと、非対話的に実行することに満足できない場合があります。コマンドをSudoなしでrootのcrontabに置くことをお勧めします。そうすると、コマンドはrootとして実行されます。
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
(~$1
を~user
に変換するには、eval
が必要ですその後を/home/user
に変換します。)
ルートのcrontabからこのスクリプトを実行します。
# root's crontab
10 * * * /usr/local/bin/myscript someuser
別の方法として、 ACLサポートを有効にする にして、setfaclを使用して同じ/類似の結果を得ることができる場合があります。