バッチ処理で、日付ファイルを処理する。

先日、”名前”で囲まれているCSVファイルから、””がSQLserverにインポートするときに邪魔なので、削除するバッチファイルを見つけた。

では、毎日読み込まれたCSVファイルを処理するにはという事で備忘録にする。

下記のバッチファイルを作成すれば完了です。callでコンバートするバッチファイルを日付CSVに読み込ませて処理させている。

@echo off

echo %date%
echo %time%

set yyyy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%

set filename=%yyyy%%mm%%dd%
call c:\point\convert.bat c:\point\%filename%.csv

Windows タスクスケジューラで定期実行

バッチファイルなどを作成した後に、オートで自動実行させたくなるものです。その時に便利なのが、Windowsに標準で装備されている、タスクスケジューラだと思う。

使用法は、様々なページで掲載されているが、今回参考にしたサイトは下記

http://www.atmarkit.co.jp/ait/articles/1305/31/news049.html

簡易的に書いておくと
(1)新しくタスクを作成する。⇒タスクスケジューラの左ペインのツリーで[タスク スケジューラ (ローカル)]フォルダーを選択してから、右側の操作ペインで[基本タスクの作成]をクリックする。これでタスク作成ウィザードが起動する。

※[タスクの作成]の方をクリックすると、ダイアログ形式で細かい設定を指定しながらタスクを新たに作成できるがウィザード形式でタスクを作成し、その後で必要に応じて設定を変更する方法でいいだろう。

(2)タスクごとに作成していく。

(3)タスクを選択して、右窓の「実行する」をやれば、定時じゃなく、すぐに実行して結果をみることができるので、本当に動いているのか?確認することができる。

(追記)実際に登録されたかを確認する方法Windows10
スタートマークを右クリックして、コンピューターの管理を開きます。その中に、システムツール>>タスクスケジューラー>>タスクスケジューラーライブラリってのがりますので、それをクリックすると登録されているタスクが確認可能

LINUX定期自動実行

特定の時間に特定のプログラムやコマンドを実行させるにはCronを使用。
通常Linuxでは直接 /etc/crontabに記入することは推奨されてない。
実際の/etc/crontabの中身は

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
05 0 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

これの意味することは、/etc/cron.hourly や /etc/cron.daily フォルダの中にあるスクリプトを定期的に実行。/etc/cron.hourlyなどの中にあるファイルはシェルスクリプトファイルなどで、ひとまとめにして実行される。

■– 文法 –■

crontab (オプション)

   例)
     crontab -e
     定期的にコマンドを自動実行する
       ※▲はスペースを表してます。

■ 説明
crontabコマンドは、定期的にコマンドやプログラムを実行する為に使用します。crontabを使用するには、crontabファイルを編集する必要があります。このファイルでは、コマンドやプログラムを実行する為に必要な細かい設定を行う。また、このcrontabは、スーパーユーザ(root)は常時使用することができるが、一般ユーザについては、「/etc/cron.allow」「/etc/cron.deny」ファイルの有無、設定によって使用できるか、できないかが決まります。

■ オプション
-l      crontabの内容を表示する
-e      crontabを編集する
-u ユーザ名 ユーザ名に指定したcrontabを編集する
-r      crontabを削除する

■ crontabの設定方法

# crontab -e
0 20 * * * /home/pakira/backup.sh
↑毎日20時なるとbackup.shを実行するように設定。

記述方法としては、「0 20 * * *」の左から
分 時間 日 月 曜日
になります。設定できる値としては下記。

分   0-59(毎分は「*」を設定)
時間  0-23(毎時は「*」を設定)
日  1-31(毎日は「*」を設定)
月  1-12(毎月は「*」を設定)
曜日 0-6 (0:Sun to 6:Sat)

複数指定する場合には「,」で区切って値を設定。
例えば、毎日8時と20時にbackup.shを実行するようにするには
0 8,20 * * * /home/pakira/backup.sh
となる。

■ 実行例

▼ crontabの内容を表示する
————————————
# crontab -l
0 8 * * * /home/pakira/backup.sh ←毎日8時にbackup.shを実行
0 12 1 * * /usr/bin/ntpdate -s -b 133.100.9.2
↑毎月1日の12時に133.100.9.2へ時刻合わせ
————————————

▼ crontabを編集する
————————————
# crontab -e

画面が切り替わり、crontabを設定できる。この画面では通常viを使用して編集。
————————————

▼ crontabを削除する
————————————
# crontab -l ←crontabの内容を表示
0 12 1 * * /usr/bin/ntpdate -s -b 133.100.9.2
# crontab -r ←corntabを削除
# crontab -l ←再度、crontabの内容を表示
no crontab for root ←crontabが設定されてないというメッセージが表示
————————————

●実行時間の詳細設定
crontabファイルで、cron コマンドの実行を記述する行は、6つのフィールドで形成されており(システムの crontabファイル(/etc/crontab)は、7つ(分、時、日、月、曜日、ユーザ名、コマンド))、コマンドの実行時間をさまざまな形式で指定することが出来ます。具体的には、以下の通りで、設定可能な値については、(表1)を参照して下さい。

なお、初めてcrontabファイルを編集した場合には、何も書かれていませんので、以下のフォーマットで記述します。また、各フィールドでは、 ‘*’ を使用することが可能です。

分 時 日 月 曜日 コマンド

表1
分 0~59
時 0~23
日 1~31
月 1~12 or jan~dec
曜日 0~7 [0,7は日曜日] or sun~sat
コマンド 有効なコマンドを記述します。空白を含むことも可能ですが、標準のBourne Shellの書式に従って記述します。

また、crontabファイルでは、リストと範囲の指定を行なうことができる。リストとは、一つのフィールドに対して、複数の値を設定することで、範囲とは、一つのフィールドに対して、特定の範囲の値を設定すること。そして、リストと範囲は、一つのフィールドに共存することもできる。さらに、間隔値(指定間隔に一度、処理を実行)を設定することもできる。

表2
設定例 コメント
リスト 0,15,30,45 分フィールドで指定した場合、15分に一度処理を実行します。
範囲 1-5 曜日フィールドで指定した場合、月曜日~金曜日に処理を実行します。
共存 1,3,7-9 時間フィールドで指定した場合、1時、3時、7時、8時、9時に処理を実行します。
間隔値 1-5/2 時間フィールドで指定した場合、1時、3時、5時に処理を実行します。なお、間隔値は、「/」の後ろに指定した値の間隔で処理を実行します。