1

Mac OS X Mountain Lion でシェル スクリプトをセットアップして、SSH 接続 (トンネル) または SFTP を使用してローカル ディレクトリをリモート ディレクトリ (Web サーバー) に同期し、30 秒ごとに継続的に実行する必要があります。

また、特定のファイルまたはフォルダーを同期から除外する必要があります。

同期は一方向 (mac -> webserver) になります。

実装する必要がある基本的なパラメーターは次のとおりです。

Local path: /Volumes/path/to/local/directory
Remote server: example.com
username: someUser
password: somePassword
Remote path: /path/from/server/root/to/htdocs
Files to exclude: '.ht*', '*.sublime-*'
Folders to exclude: 'cache','administrator/cache'

また、crontask を作成し、それをシステムに追加して自動的に実行するための支援も必要です。

どんな助けでも大歓迎です。

4

2 に答える 2

1
  1. クリアテキストで保存する必要があるため、ユーザー名/パスワードを使用する代わりにsshキー認証を検討する必要があります。SSHキー認証の方法

  2. 除外を使用してファイルを作成し、それを呼び出します。excludeList.lstrsync除外ファイル-例を参照)

  3. のコマンドrsyncは次のようなものです(ドキュメントを読んでください:man rsync、問題の解決策も含めて、たくさんの例があります)

    rsync -avz --exclude-from'excludeList.lst' / Volumes / path / to / local / directory -e ssh somUser@example.com:/path/from/server/root/to/htdocs

  4. スクリプトをテストする

  5. cron cronジョブを追加します-30秒ごとまたはlaunchd Macでは30秒ごとにスクリプトを実行します

ところで。あなたもこの調査を行うことができたでしょう…</p>

于 2012-10-31T11:23:38.917 に答える
1

これが私がすることです:

まず、ssh (ユーザー名とパスワードでログイン) を使用できることをテストします。

$ ssh example.com
^D

SSH キーを作成します。

$ ssh-keygen

(パスワードは入力しないでください)

これにより、~/.ssh/id_rsa(秘密鍵) と~/.ssh/id_rsa.pub(公開鍵ファイル)が作成されます。

公開鍵 ( id_rsa.pub) をリモート サーバー ( example.com) に転送し、リモート サーバーで次の手順を実行する必要があります。

$ cat id_rsa.pub >> ~/.ssh/authorized_keys
$ rm id_rsa.pub
^D

これにより、公開鍵が許可された鍵のセットに追加されます。

ユーザー名とパスワードを使用せずに、ssh を使用してリモート サーバーに接続できるようになりました。

次に、rsync コマンドを使用します。以下で十分です。

$ rsync -avz -e ssh 
     --exclude '*.ht*' --exclude '*.sublime-*' --exclude 'cache/' 
     --exclude 'administrator/cache'
     someUser@example.com:/directory/on/server /directory/on/local

(すべて 1 行で入力する必要があります)

ここで、これが機能することに満足したら、そのコマンドをシェル スクリプト ( rsync_script.sh)に入れます。

launchctl次に、それをスケジュールするために使用できます。

~/Library/LaunchAgents/作成com.example.rsync.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.example.rsync</string>
    <key>KeepAlive</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>/path/to/rsync_script.sh</string>
    </array>
    <key>StartInterval</key>
    <integer>30</integer>
</dict>
</plist>

落とし穴のカップル:

  • rsync_script.sh が実行可能であることを確認してください。chmod 755 /path/to/the/rsync_script.sh
  • launchdSSH キーを作成したユーザーが、 plistを設定したユーザーと同じであることを確認してください。
于 2012-10-31T11:28:33.347 に答える