web-dev-qa-db-ja.com

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

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

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

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

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

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

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

これを行う方法?

9
tvgemert

ルート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に移動します。

9
dr jimbob

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

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

16
voretaq7

2つの問題:

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

2)通常、sudoはパスワードを要求します。そうしないと、非対話的に実行することに満足できない場合があります。コマンドをSudoなしでrootのcrontabに置くことをお勧めします。そうすると、コマンドはrootとして実行されます。

6
pjc50

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

~$1~userに変換するには、evalが必要ですその後/home/userに変換します。)

ルートのcrontabからこのスクリプトを実行します。

# root's crontab
10 * * * /usr/local/bin/myscript someuser
5
Mei

別の方法として、 ACLサポートを有効にする にして、setfaclを使用して同じ/類似の結果を得ることができる場合があります。

0
Ryan D