【cygwin】cronの構築

# 1. はじめに

　既にcronを使っていますが、サービスから見た時の「説明」を追加してデバッグオプション付きでcronを動かしたいためやり直し。

　ここでは停止から再起動までの手順をメモ。主に必要なものはcygrunsrv, cron, nkf。nkfはソースからインストールする必要あり。

https://qiita.com/koKekkoh/items/37776d93c8b1f7e3b656

# 2. サービスの停止から削除まで
## 2.1. サービスの停止でエラー
　エラーの原因も分かるようにした。
　nkfの使い方も分かるように複数パターンで実行。

```
$ cygrunsrv --list
cygcron

$ cygrunsrv --query cygcron
Service             : cygcron
Current State       : Running
Controls Accepted   : Stop
Command             : /usr/sbin/cron -n

$ cygrunsrv --stop cygcron
cygrunsrv: Error stopping a service: OpenService:  Win32 error 5:
▒A▒N▒Z▒X▒▒▒▒▒ۂ▒▒▒܂▒▒▒▒B

$ cygrunsrv --stop cygcron | nkf
cygrunsrv: Error stopping a service: OpenService:  Win32 error 5:
▒A▒N▒Z▒X▒▒▒▒▒ۂ▒▒▒܂▒▒▒▒B

$ cygrunsrv --stop cygcron 2>&1  | nkf
cygrunsrv: Error stopping a service: OpenService:  Win32 error 5:
アクセスが拒否されました。

$ cygrunsrv --stop cygcron 2>&1  | nkf -Sw
cygrunsrv: Error stopping a service: OpenService:  Win32 error 5:
アクセスが拒否されました。

```

## 2.2. 「管理者として実行」でcygwinを起動

```
$ cygrunsrv --stop cygcron

$ cygrunsrv --query cygcron
Service             : cygcron
Current State       : Stopped
Command             : /usr/sbin/cron -n

$ cygrunsrv --remove cygcron

$ cygrunsrv --list

```

# 3. サービスの再登録から起動まで
cronを初めて設定する場合はここから

## 3.1. サービスの登録
```
$ cygrunsrv --install cron --desc "Cygwin Cron" \
> --path /usr/sbin/cron --args "-n -x ext,sch,proc,pars,load,misc"

$ cygrunsrv --query cron
Service             : cron
Description         : Cygwin Cron
Current State       : Stopped
Command             : /usr/sbin/cron -n -x ext,sch,proc,pars,load,misc
```

## 3.2. サービスの起動
```
$ cygrunsrv --start cron

$ cygrunsrv --query cron
Service             : cron
Description         : Cygwin Cron
Current State       : Running
Controls Accepted   : Stop
Command             : /usr/sbin/cron -n -x ext,sch,proc,pars,load,misc
```
## 3.3. cron.pid, cron.logの確認
```
$ cat /var/run/cron.pid
1425

$ cat /var/log/cron.log
debug flags enabled: ext sch proc pars load misc
[1425] cron started
log_it: (CRON 1425) STARTUP (V5.0)

$ ps -ef | grep cron
  SYSTEM    1425    1424 ?        11:22:56 /usr/sbin/cron
```

# 4. 以上のことをさくっとやりたいなら

以下の内容を「setup.sh」に保存して、「bash setup.sh」と実行してください。
「管理者として実行」を忘れずに。

```bash
#!/usr/bin/bash

NAME="cron"
DESC="Cygwin Cron"

readonly CRON_PATH="/usr/sbin/cron"
readonly CRON_ARGS="-n -x ext,sch,proc,pars,load,misc"
#readonly CRON_ARGS="-n"

########## FUNCTION

echodo()
{
        echo "########## CMD[$@]"
        "$@"
        return $?
}

########## MAIN

# stop and remove

SERVICE_NAME=`cygrunsrv --list | egrep -i cron`

if [ -z "${SERVICE_NAME}" ]
then
        trun
else
        NAME=$SERVICE_NAME
        echodo cygrunsrv --stop $NAME
        echodo cygrunsrv --query $NAME
        echodo cygrunsrv --remove $NAME
fi

# install and start

echodo cygrunsrv --list
echodo cygrunsrv --install $NAME --desc "$DESC" --path $CRON_PATH --args "$CRON_ARGS"
echodo cygrunsrv --start $NAME
echodo cygrunsrv --query $NAME
```

　スクリプトにしておくとオプションなどの再設定をした時の作業が楽にできるようになります。そのため、「新規に実行」「やりなおし」の両方を意識して書いています。

# 5. cronの稼働状況

```
$ cygrunsrv --query cron --verbose
Service             : cron
Description         : Cygwin Cron
Current State       : Running
Controls Accepted   : Stop
Command             : /usr/sbin/cron -n -x ext,sch,proc,pars,load,misc
Working Dir         : /var/empty
stdin path          : /dev/null
stdout path         : /var/log/cron.log
stderr path         : /var/log/cron.log
Process Type        : Own Process
Startup             : Automatic
Account             : LocalSystem
```

# 6. 備考

cron-configの使い方が分かりません。