| Crates.io | chronsync |
| lib.rs | chronsync |
| version | 0.2.2 |
| created_at | 2025-12-11 09:20:48.039104+00 |
| updated_at | 2025-12-11 18:42:52.112068+00 |
| description | Lightweight, real-time reloading cron-like task scheduler daemon |
| homepage | |
| repository | https://github.com/coil398/chronsync |
| max_upload_size | |
| id | 1979403 |
| size | 109,698 |
chronsyncは、Chrono (時間) + cron + sync (同期) から名付けられました。 chronsyncは、Rustで構築された超軽量なCLIタスクスケジューラー(デーモン)です。 JSON設定ファイルに基づき、cronライクなスケジュールで外部コマンドを永続的に実行します。 設定ファイルの変更を即座に検知し、実行中のタスクを停止・再構築(リロード)するホットリロード機能を備えています。
tokio を採用し、安定した長時間稼働を実現。config.json)の変更をリアルタイムで監視。サービスを再起動することなく、保存と同時にタスク定義を更新します。ソースコードからビルドしてインストールします。
# リポジトリのクローン
git clone https://github.com/coil398/chronsync.git
cd chronsync
# ローカルへのインストール (パスが通った場所にバイナリが配置されます)
car go install --path .
config.json)chronsyncの動作には設定ファイルが必須です。 アプリケーションは起動時に標準的な設定ディレクトリ(XDG Base Directoryなど)を検索します。
設定ディレクトリに config.json を作成してください。
便利な init コマンドでひな形を作成することもできます。
chronsync init
| OS | パス |
|---|---|
| Linux / macOS | ~/.config/chronsync/config.json |
💡 ヒント: 初回起動時に設定ファイルが見つからない場合、chronsyncは検索したパスをエラーログに出力して終了します。そのパスを参考にファイルを配置してください。
JSON形式で tasks 配列を定義します。
{
"tasks": [
{
"name": "ping_test",
"cron_schedule": "*/5 * * * * *",
"command": "/bin/echo",
"args": ["Hello World"]
},
{
"name": "shell_script_example",
"cron_schedule": "0 0 * * * *",
"command": "/bin/sh",
"args": [
"-c",
"/bin/echo \"Current date is $(date)\""
]
}
]
}
*/1 * * * * * (毎秒), 0 30 9 * * * (毎日9:30:00)| やリダイレクト >、環境変数展開 $VAR を使用したい場合は、command にシェル(/bin/sh や /bin/bash)を指定し、args で "-c" とコマンド文字列を渡してください。# コンパイルして実行
car go run -- run
# またはインストール済みなら
chronsync run
chronsync はサービス管理機能を内蔵しており、コマンド一つで常駐サービス(デーモン)として登録・管理できます。
Linux (Systemd), macOS (Launchd), Windows (Service) に対応しています。
--user (グローバルオプション): ユーザーサービスとして操作chronsync の service コマンドは、デフォルトではシステムレベルのサービス(通常 sudo が必要)として操作しようとします。
現在のユーザーの権限でサービスを管理したい場合は、--user グローバルオプションを付けてください。
# システムサービスとしてインストール (sudo が必要)
sudo chronsync service install
# ユーザーサービスとしてインストール (sudo 不要)
chronsync --user service install
自動起動の設定も行われます。
# システムサービスとしてインストール (sudo が必要)
sudo chronsync service install
# ユーザーサービスとしてインストール (sudo 不要)
chronsync --user service install
インストール後、サービスを開始します。
# システムサービス
sudo chronsync service start
# ユーザーサービス
chronsync --user service start
chronsync --user service stop (ユーザーサービスの場合) または sudo chronsync service stop (システムサービスの場合)chronsync --user service uninstall (ユーザーサービスの場合) または sudo chronsync service uninstall (システムサービスの場合)サービスのログは、journalctl コマンドを使う代わりに、chronsync service log コマンドで簡単に確認できます。
# システムサービスのログを表示 (デフォルト20行、リアルタイム監視)
sudo chronsync service log -f
# ユーザーサービスのログを表示 (デフォルト20行、リアルタイム監視)
chronsync --user service log -f
# システムサービスの最新100行を表示
sudo chronsync service log -n 100
# ユーザーサービスの最新50行を表示
chronsync --user service log -n 50
手動で細かく設定したい場合は、以下の手順で Systemd に登録できます。
ユニットファイルの作成
~/.config/systemd/user/chronsync.service を作成します(ディレクトリがない場合は作成してください)。
[Unit]
Description=chronsync Task Scheduler
After=network.target
[Service]
# cargo installでインストールしたバイナリのパスを指定
# "which chronsync" コマンドで確認できます (例: /home/ユーザー名/.cargo/bin/chronsync)
ExecStart=%h/.cargo/bin/chronsync run
# 常に再起動
Restart=always
RestartSec=5s
# ログ出力設定
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=default.target
サービスの有効化と起動
# 設定の再読み込み
systemctl --user daemon-reload
# サービスの起動
systemctl --user start chronsync
# 自動起動の有効化
systemctl --user enable chronsync
ログの確認
journalctl --user -u chronsync -f
.
├── src/
│ ├── main.rs # エントリーポイント
│ ├── commands.rs # 各コマンドのハンドラ
│ ├── cli.rs # CLI引数の定義
│ ├── config.rs # 設定ファイルの定義と読み込みロジック
│ ├── scheduler.rs # タスクのスケジューリングと実行管理
│ ├── watcher.rs # 設定ファイルの変更監視
│ └── utils.rs # ユーティリティ
├── config.json # 設定ファイルのサンプル
└── Cargo.toml # 依存関係定義