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/
このように、実際の環境に合わせて適切な権限を設定することが重要です。