---
title: "cronsunを試してみた | grasys blog"
url: "https://blog.grasys.io/post/shinohara/cronsuntips"
description: "CentOSに分散型ジョブ管理システムであるcronsunを構築してみました。 こんにちは！shinoharaです！ コロナが早く収まると良いなと思う今日この頃です。 初めてのブログで何を書いたら良いのか悩んだのですが、unix上のジョブをポータルから管理実行出来るOSSシステムであるcronsunの構築方法を書いて…"
---

# cronsunを試してみた

-   ![](/_astro/noicon.CTHOhNiB_1HMs6A.webp)[shinohara](/authors/shinohara/)
-   公開日：2021年1月14日
-   カテゴリー：[Tech](/categories/tech/)
-   タグ：[#cronsun](/tags/cronsun/)

![cronsunを試してみた](/_astro/og-image.DDSiu2Ny_XHpDd.webp)

CentOSに分散型ジョブ管理システムであるcronsunを構築してみました。

こんにちは！shinoharaです！ コロナが早く収まると良いなと思う今日この頃です。 初めてのブログで何を書いたら良いのか悩んだのですが、unix上のジョブをポータルから管理実行出来るOSSシステムであるcronsunの構築方法を書いてみます。

## なぜやってみようと思ったのか

システム運用に関わるとcron起動のジョブ管理をする場面は多々あると思いますが、  
サーバの台数が増えると管理が大変になります。  
そこで分散型ジョブ管理システムの dkronを利用していましたが、エラーが発生した場合などにログ履歴が 少なくもう少し、ログ管理機能が豊富なジョブ管理システムを探していた所cronsunが候補に上がったので試してみました。

・ダッシュボード画面

![分散型ジョブ管理システムCronsunのダッシュボード](/_astro/01-00-4-fdb00d25.Bp3F1TKY_ZWGmz5.webp)

・ログ履歴画面

![分散型ジョブ管理システムCronsunのログ履歴画面](/_astro/02-01-6-28e10fc6.BgEgmTec_Z1y8zXR.webp)

## 公式サイトはこちら

[https://github.com/shunfei/cronsun](https://github.com/shunfei/cronsun)

## 構成

cronsunの構成を考えると操作用のWebサーバとジョブが実行されるノードサーバ、 　設定や履歴を保存する。DBサーバが必要ですので通常ならこのような構成になるかと思います。

![cronsunの構成を考えると操作用のWebサーバとジョブが実行されるノードサーバ、 設定や履歴を保存する画面](/_astro/03-02-5-275ea8c8.CPSabRg5_AQS8s.webp)

今回はもう少し簡略化した構成にしてみます。

![今回はもう少し簡略化した構成にする画面](/_astro/04-03-6-20c125bd.B3wyndIT_1yVusw.webp)

「 WEBサーバ、ノードサーバ、DBサーバ」を兼ねているサーバを以下  
「マスタサーバ」とします。

## インストールが必要なアプリケーション

| アプリ | version | 機能 | サーバ |
| --- | --- | --- | --- |
| mongodb | 4.2.11 | ドキュメント指向NoSQLデータベース | マスタ |
| etcd | 3.3.11-2 | OSSのKey-Value Store | マスタ |
| golang | 1.11.13 | go言語のランタイム環境 | マスタ、ノード |
| git | 1.8.3.1 | 分散型バージョン管理システム | マスタ、ノード |
| wget | 1.14.1 | コンテンツを取得するダウンローダ | マスタ、ノード |
| gcc | 4.8.5 | GNUコンパイラコレクション | マスタ、ノード |

※ golang以外のversionは動作確認時のもので必須ではありません。

##### インストールコマンドです。

Plain textcontent\_copy

```
yum install -y git
yum install -y wget
yum install -y gcc
yum install -y mongodb-org
yum install -y etcd
wget https://golang.org/dl/go1.11.13.linux-amd64.tar.gz

golangは任意のディレクトリに解凍し
GOROOT、GOPATH、PATHを設定して下さい。
```

## マスタサーバの設定

まずは設定ファイルを修正します。

### ETCD設定ファイル

-   /etc/etcd/etcd.conf

Plain textcontent\_copy

```
#[Member]
#ETCD_LISTEN_PEER_URLS="http://localhost:2380"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379"
```

-   上記の設定をノードサーバからも接続可能にする為、マスタサーバのIPアドレスに書き換えます。

Plain textcontent\_copy

```
#[Member]
ETCD_LISTEN_PEER_URLS="http://10.146.1.2:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
```

#### mongodb設定ファイル

-   /etc/mongod.conf
-   bindIpに接続を許可する為ノードサーバのIPアドレスを設定します。

Plain textcontent\_copy

```
# network interfaces
net:
  port: 27017
  bindIp: 10.146.1.3 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
```

-   設定ファイルの修正が完了したら、mongodb、etcdを起動します。

#### cronsunのインストールとビルド

　次に公式サイトの手順に従いcronsunをgithubから取得してビルドをします。

Plain textcontent\_copy

```
export GO111MODULE=on
go get -u github.com/shunfei/cronsun
cd $GOPATH/src/github.com/shunfei/cronsun
go mod vendor
sh build.sh
```

が、ここに落とし穴が！！

go get してもリポジトリが取得できない・・・・・・うーん

Bashcontent\_copy

```
export GO111MODULE=off
```

にしてgo get を実行を実行。。。。リポジトリを取得できた。

-   GOPATH配下にリポジトリがクローンされるのでcronsunまでカレントディレクトリを移動します。

さっそくsh build.shを実行して、コンパイルが通らない・・・・・・うーん  
go.sumファイルを削除

Bashcontent\_copy

```
export GO111MODULE=on
```

にしてbuildを実行。。。。通った。

###### buildが正常終了するとcronsun以下にdistディレクトリが作成されます。

#### cronsunの設定ファイルを修正

-   mongodbにユーザパスワードを設定した場合は/dist/conf/db.jsonを修正する必要があります。

Plain textcontent\_copy

```
 "AuthSource": "admin",
 "UserName": "dbuser",
 "Password": "password",
```

#### cronsunを起動

-   distディレクトリで以下のコマンドを実行すれば立ち上がります。  
    （終了する場合はkillコマンドを実行します。）

Plain textcontent\_copy

```
# ノードを起動
./cronnode -conf conf/base.json & 
# Webを起動
./cronweb -conf conf/base.json & 
```

-   ブラウザから以下のURLにアクセスするとログイン画面が表示されます。  
    [http://127.0.0.1:7079/ui/#/login](http://127.0.0.1:7079/ui/#/login)  
    (127.0.0.1はマスタサーバのIPアドレスとなります。)

###### ログイン画面

![ログイン画面のロゴ（1）](/_astro/05-04-3-106724bb.CpCq2Nt3_Zbqpnp.webp)

中国語ですね。右上の歯車アイコンから英語を選択出来ます。

![ログイン画面のロゴ（2）](/_astro/06-05-3-94d351b4.CKjrlScH_8mi2Y.webp)

デフォルトのログイン情報は以下となります。

Plain textcontent\_copy

```
 user：admin@admin.com
 passeord：admin
```

## ノードサーバの設定

マスタサーバと同様に、cronsunのインストールとビルドを実行します。

### cronsunの設定ファイルを修正

-   /dist/conf/etcd.jsonを修正する必要があります。EndpointsにマスタサーバのIPアドレスを記述します。

Plain textcontent\_copy

```
{
    "Endpoints":[
        "http://10.146.1.2:2379"
    ],
    "Username":"",
    "Password":"",
    "#DialTimeout":"单位秒",
    "DialTimeout": 2
}
```

-   /dist/conf/db.jsonを修正する必要があります。HostsにマスタサーバのIPアドレスを記述します。

Plain textcontent\_copy

```
{
  "Hosts": [
    "10.146.1.2:27017"
  ],
　# mongodbに認証をかけている場合は認証情報も記載します。
  "AuthSource": "admin",
  "UserName": "dbuser",
  "Password": "password",
} 
```

#### cronsunノードを起動

-   distディレクトリで以下のコマンドを実行すればノードが立ち上がります。

Plain textcontent\_copy

```
./cronnode -conf conf/base.json & 
```

-   Web画面からノードタグを選択しノードを確認してみます。マスタサーバとノードサーバの２つが表示されました。表示されない場合は画面をリロードすると表示される場合があります。

![cronsunノードを起動の画面](/_astro/07-06-3-b7c3a134.B9J4hl9m_1VLkuu.webp)

#### cronジョブを実行

-   Web画面からJobタグを選択するとジョブ登録が出来ます。  
    ls コマンドを登録してみます。

![CronsunのWeb画面でlsコマンドのジョブを登録する画面](/_astro/08-07-1-5099dacf.CyZZcQd0_ZxyoVL.webp)

#### SAVEで保存しジョブを実行

-   logタブからマスターサーバの実行履歴を見てみます。

![Cronsunのマスターサーバーにおけるジョブ実行履歴](/_astro/09-08-1-0dbeef67.CYTJUqgY_Z1Vl5hi.webp)

-   logタブからノードーサーバの実行履歴を見てみます。

![Cronsunのノードサーバーにおけるジョブ実行履歴](/_astro/10-09-1-6dfd9dab.B8-gfnMM_1awr10.webp)

-   マスタサーバとノードサーバでコマンドが実行されました。

## おわり

思った以上に使いやすく動作も安定しています。ノード数は２つのみですが1万回以上の連続実行をしても問題はないようです。複数台のサーバを（弊社ではクラウドを使っていますのでVM管理になりますが）、管理する場合にはとても便利です。

## この記事を書いた人

[![](/_astro/noicon.CTHOhNiB_Z24aAgM.webp)](/authors/shinohara/)

### [shinohara](/authors/shinohara/)

shinoharaのプロフィールと執筆記事をご覧いただけます。

[プロフィールと記事一覧](/authors/shinohara/)