1
0

Node.jsを使った定期的なファイル同期の構築手順

Posted at

node-cronを使ったフォルダ同期の環境構築

Node.jsとnode-cronパッケージ、rsyncユーティリティを使用して、指定のフォルダ間で15秒ごとにファイルを同期する環境を構築します。

前提条件

  • Node.jsがインストールされていること
  • node-cronパッケージがインストールされていること
  • rsyncユーティリティがインストールされていること
  • 対象のフォルダ(/bitnami/wordpress/wp-content/uploads/ と /home/bitnami/Dropbox/wp-uploads/)が存在していること

手順

1. Node.jsとnpmのインストール

Node.jsの最新版をインストールします。

curl -sL https://deb.nodesource.com/setup_current.x | sudo -E bash -
sudo apt-get install -y nodejs

node-cronパッケージをインストールします。

npm install node-cron

2. スケジュールスクリプトの設定 (schedule.js)

schedule.jsファイルを作成し、以下のコードを貼り付けます。

const cron = require('node-cron');
const { exec } = require('child_process');

cron.schedule('*/15 *', () => {
  console.log('Running sync_script.sh every 15 seconds');
  exec('/home/bitnami/Script/sync_script.sh', (error, stdout, stderr) => {
    if (error) {
      console.error(`Execution error: ${error.message}`);
      return;
    }
    if (stderr) {
      console.error(`Script error: ${stderr}`);
    }
    if (stdout) {
      console.log(`Output: ${stdout}`);
    }
  });
});

このコードは15秒ごとにsync_script.shを実行します。

3. 同期スクリプトの設定 (sync_script.sh)

sync_script.shファイルを作成し、以下のコードを貼り付けます。

#!/bin/bash

rsync -avz /bitnami/wordpress/wp-content/uploads/ /home/bitnami/Dropbox/wp-uploads/

このスクリプトは/bitnami/wordpress/wp-content/uploads/ディレクトリから/home/bitnami/Dropbox/wp-uploads/へファイルを同期します。

ファイルに実行権限を付与します。

chmod +x /home/bitnami/Script/sync_script.sh

4. スケジュールスクリプトの実行

schedule.jsスクリプトをNode.jsで実行します。

node /home/bitnami/my-scheduled-task/schedule.js

(オプション) スクリプトが常に実行されるようにするには、Node.jsプロセスマネージャー(pm2など)を使用することをおすすめします。

5. 動作確認

スクリプトが正しく動作しているかを確認します。15秒ごとに同期が行われ、ログにメッセージが出力されるはずです。

Running sync_script.sh every 15 seconds
Output: sent 67896 bytes  received 26 bytes  135840.00 bytes/sec
total size is 67922  speedup is 1.00

6. 権限の確認

rsyncが正常に動作するためには、/bitnami/wordpress/wp-content/uploads/ディレクトリと/home/bitnami/Dropbox/wp-uploads/ディレクトリに対する適切な読み取り/書き込み権限が必要です。

具体的には、ディレクトリの所有者やグループ、その他のユーザーに対して、適切な権限を設定する必要があります。以下のコマンドを使って、現在の権限を確認できます。

ls -ld /bitnami/wordpress/wp-content/uploads/
ls -ld /home/bitnami/Dropbox/wp-uploads/

出力例:

drwxrwxrwx 7 bitnami daemon 4096 Jan  1 00:39 /bitnami/wordpress/wp-content/uploads/
drwxr-xr-x 3 bitnami bitnami 4096 Mar 24 23:06 /home/bitnami/Dropbox/wp-uploads/

この例では、/bitnami/wordpress/wp-content/uploads/ディレクトリに対して、所有者(bitnami)、グループ(daemon)、その他のユーザーがフルアクセス権限を持っています。

一方、/home/bitnami/Dropbox/wp-uploads/ディレクトリに対しては、所有者(bitnami)とグループ(bitnami)がフルアクセス権限を持ち、その他のユーザーが読み取り権限のみを持っています。

rsyncが正常に動作するためには、これらのディレクトリに対する適切な読み取り/書き込み権限が必要です。この例の場合、/bitnami/wordpress/wp-content/uploads/ディレクトリに対する権限は適切に設定されていますが、/home/bitnami/Dropbox/wp-uploads/ディレクトリに対する権限を調整する必要があるかもしれません。

必要に応じて、chmodコマンドを使ってディレクトリの権限を変更してください。例えば、/home/bitnami/Dropbox/wp-uploads/ディレクトリに対して、所有者とグループがフルアクセス権限を持ち、その他のユーザーが読み取り権限のみを持つように設定するには、以下のコマンドを実行します。

chmod 770 /home/bitnami/Dropbox/wp-uploads/

このように、実際の環境に合わせて適切な権限を設定することが重要です。

以上で、node-cronを使ってフォルダ同期を15秒ごとに実行する環境が構築できました。必要に応じて、cron.schedule()の引数を変更することで、同期の間隔を調整できます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0