chmod / chownを実行するcronジョブの設定


9

ディレクトリ(ドロップボックスディレクトリ)でchmod / chownを繰り返し行うcronジョブを設定したいと思います。

これは、次のようにコマンドを手動で実行すると機能します。

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

私はそれを次のようなcronジョブに変換しようとしました:

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

しかし、それは仕事をしていないようです。

これを行う方法?


incron+ inotifyよりクリーンなソリューションになります:)
フランツロレンソン2014年

回答:


9

ルート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ます。


1
明確な答えをありがとう!これは私が探していたミッシングリンクのいくつかを示していると思います。私はそれを明日最初にテストします:)
tvgemert

テストしてみました。
tvgemert

2
すごい; その働きをうれしく思います。レッスンは(a)$PATHcronjobでサインインしたユーザーの環境変数と同等に定義されるような環境変数を期待しない(たとえば、私のlinuxboxで$ HOMEが定義されているが、$ PATHがcrontabおよび$ USER /usr/binとの間で設定されている/binが定義されていないため、この場合/bin、chmod / chownの前に指定する必要はありませんでした)、(b)sudoスクリプトで回避(rootユーザーとしてcronタスクを実行)、(c)rootユーザー$HOMEは通常のユーザーではなく/ rootを参照するため、(d)は~、デフォルトの実行によって(cronスクリプトでは避けるべきである#!/bin/sh
DRのjimbob

これよりも複雑なことをする場合は、Davidのアドバイスに従ってスクリプトを入力することもお勧めします。スクリプトは、chmod / chownの組み合わせにとってはやり過ぎのようです。ただし、他のユーザーのDropboxや他のディレクトリへの適用を開始したり、最近変更されたファイル(たとえばの結果find)だけで実行することにした場合などは、スクリプトを挿入するのが理にかなっています。
ジンボブ博士、2012

16

sudoスケジュールされたタスクで使用することほとんどあり ません。端末と通信できることを期待しており、そうすることを避けるために特定のフラグが必要です。

代わりに、rootとしてcronジョブを作成します(/etc/crontabこのファイルの形式は若干異なります :)。 これには、がインストールされていないシステムで作業できるという利点もあります。minute hour mday month wdayusercommand
sudo


ありがとう!これを作成しましたが、まだわかりません。期待した結果が得られませんでした: 55 * * * * root chown -R somename ~/Dropbox
tvgemert '16

3
somenameどこでもかまいません。相対パスです。第二に、~シェルによってのみ理解されます。使用します$HOME。次のようなコマンドchown -R /some/path/somename $HOME/Dropboxを使用します(これはrootのホームディレクトリを使用します...)
Mei

@David:somenameはパスではありませんが、ユーザー名(およびグループ名も含む必要があります:somename:somegroup);)
knittl

5
何@tvgemertダビデは(パス/相対パス/シンボリックパスについて(および彼の答えで)上に言っ~ている)非常に重要な cronとcrontabのmanページにいくつかの時間を費やすと、必ず疑問がある場合は(何が起こっているかを理解してください- 、echo "what you want to do" > /tmp/what-i-would-run結果を実行して結果が正しいことを確認するcronジョブを作成します-宇宙を破壊する可能性は
はるかに低く

役に立つヒントをありがとう、もう少し洞察を与えてくれました!
tvgemert 2012

6

2つの問題:

1)パスは通常、ログイン時と同じようにcronで設定されません。/usr/bin/sudo/ bin / chown ...(またはシステム上のこれらのプログラムへの適切なパスであれば何でも)を試してください。

2)sudoは通常、パスワードを要求します。そうしないと、非対話的に実行したくない場合があります。代わりに、sudoを使用せずにコマンドをrootのcrontabに配置して、コマンドをrootとして実行することをお勧めします。


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.