nysol 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 47568cc0425729a28f3749309e70fced69c375ed
4
+ data.tar.gz: 17e6a43e4729162e47836b570f7e12cb654f9c7d
5
+ SHA512:
6
+ metadata.gz: 4726dbeaa3c4f10c5000a372f2b44a2ad258da3659566f6f9b8e50e3d3bfd5ceb878971f6d86167aea524f5d2b5912084c79882bbc4bd3a575cb521b0a285567
7
+ data.tar.gz: cd6bfd3f95cb6bc2129f6500e4ad87b8bf371a22edba1577b73190a23583ca541bf668d6778b9a9bdd735878e12ea9f9da2c34dc1478d74b5906257e7a40ce54
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ if ARGV.size!=1
4
+ puts "usage) macのメモリ非使用領域を定期的に解放する。"
5
+ puts "#{$0} sleep間隔(sec)"
6
+ puts "#{$0} 120"
7
+ exit
8
+ end
9
+
10
+ sleeping=ARGV[0].to_i
11
+
12
+ while true
13
+ print "purging start (#{Time.new})..."
14
+ system "purge"
15
+ puts "done. sleeping #{sleeping} sec..."
16
+ sleep(sleeping)
17
+ end
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ #/* ////////// LICENSE INFO ////////////////////
4
+ #
5
+ # * Copyright (C) 2013 by NYSOL CORPORATION
6
+ # *
7
+ # * Unless you have received this program directly from NYSOL pursuant
8
+ # * to the terms of a commercial license agreement with NYSOL, then
9
+ # * this program is licensed to you under the terms of the GNU Affero General
10
+ # * Public License (AGPL) as published by the Free Software Foundation,
11
+ # * either version 3 of the License, or (at your option) any later version.
12
+ # *
13
+ # * This program is distributed in the hope that it will be useful, but
14
+ # * WITHOUT ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF
15
+ # * NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
16
+ # *
17
+ # * Please refer to the AGPL (http://www.gnu.org/licenses/agpl-3.0.txt)
18
+ # * for more details.
19
+ #
20
+ # ////////// LICENSE INFO ////////////////////*/
21
+
22
+ require "rubygems"
23
+ require "nysol/mcmd"
24
+ require "nysol/mparallelmanager"
25
+
26
+
27
+ $version="1.0"
28
+ $revision="###VERSION###"
29
+
30
+ def help
31
+
32
+ STDERR.puts <<EOF
33
+ ----------------------------
34
+ mdistcopy.rb version #{$version}
35
+ ----------------------------
36
+ 概要) distcopyプログラム i=path
37
+ データを転送するプログラム
38
+ 特徴) i=指定したファイル
39
+ 用法) mdistfile.rb i=
40
+ i= : ソース
41
+ EOF
42
+ exit
43
+ end
44
+
45
+ def ver()
46
+ $revision ="0" if $revision =~ /VERSION/
47
+ STDERR.puts "version #{$version} revision #{$revision}"
48
+ exit
49
+ end
50
+
51
+ help() if ARGV[0]=="--help" or ARGV.size <= 0
52
+ ver() if ARGV[0]=="--version"
53
+
54
+ args=MCMD::Margs.new(ARGV,"i=,pclist=,mp=","i=")
55
+
56
+ mpLim = args.int("mp=",4)
57
+ ifiles = args.str("i=")
58
+ pclist = args.str("pclist=","/etc/pclist")
59
+
60
+ pcM = MCMD::MpcManager.new(pclist)
61
+ tempC = MCMD::Mtemp.new
62
+ tPath = tempC.path
63
+ cPath = ENV['PWD']
64
+
65
+ # HOMEからのパスで圧縮
66
+ ifiles.split(",").each{|fn|
67
+ fnL = File.expand_path(fn)
68
+ fnH = fnL.gsub(/^#{ENV['HOME']}\//,"")
69
+ tarF = "#{tempC.file}.tar.gz"
70
+
71
+ if fnH==fnL then
72
+ system("tar czvf #{tarF} ")
73
+ else
74
+ system("tar czvf #{tarF} -C #{ENV['HOME']} #{fnH}")
75
+ end
76
+ flist = Array.new(pcM.pcCount,tarF)
77
+ flist.meachc([pcM.pcCount,1]){|fn|
78
+ fn.gsub!(/^\//,"")
79
+ if fnH==fnL then
80
+ system("tar xzvf #{fn} -C /")
81
+ else
82
+ system("tar xzvf #{fn} -C #{ENV['HOME']}")
83
+ end
84
+ }
85
+ }
86
+
87
+ # 終了メッセージ
88
+ MCMD::endLog(args.cmdline)
89
+
@@ -0,0 +1,284 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ #/* ////////// LICENSE INFO ////////////////////
4
+ #
5
+ # * Copyright (C) 2013 by NYSOL CORPORATION
6
+ # *
7
+ # * Unless you have received this program directly from NYSOL pursuant
8
+ # * to the terms of a commercial license agreement with NYSOL, then
9
+ # * this program is licensed to you under the terms of the GNU Affero General
10
+ # * Public License (AGPL) as published by the Free Software Foundation,
11
+ # * either version 3 of the License, or (at your option) any later version.
12
+ # *
13
+ # * This program is distributed in the hope that it will be useful, but
14
+ # * WITHOUT ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF
15
+ # * NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
16
+ # *
17
+ # * Please refer to the AGPL (http://www.gnu.org/licenses/agpl-3.0.txt)
18
+ # * for more details.
19
+ #
20
+ # ////////// LICENSE INFO ////////////////////*/
21
+
22
+ require "rubygems"
23
+ require "nysol/mcmd"
24
+
25
+ # 1.2: mp= parameter 追加
26
+ $version="1.2"
27
+ $revision="###VERSION###"
28
+
29
+ def help
30
+
31
+ STDERR.puts <<EOF
32
+ ----------------------------
33
+ meach.rb version #{$version}
34
+ ----------------------------
35
+ 概要) 指定したディレクトリに格納された全ファイルに対して同じ処理を行う。
36
+ 入力ファイル毎に結果を出力するか、全ての結果を一つのファイルに出力するかを選択できる。
37
+ 特徴) mcatと同様の動きをするが、各入力ファイルの属性(ファイル名やサイズ、更新日時など)を扱うことが可能である点が異なる。
38
+ * 処理の指定はコマンドラインを文字列として与え、そのままシェルに渡され実行される(入力ファイル毎に)。
39
+ * MCMDだけでなく、実行環境で利用できるコマンドは全て利用可能。
40
+ * 入力データの形式は問わないので、XMLや画像などあらゆるデータを入力ファイルとして扱うことが可能。
41
+ * ただし、出力はo=の場合はCSVでなければならない。O=の場合はどのようなフォーマットであってもよい。
42
+
43
+ 用法) meach.rb i= [o=|O=] cmd= [try=] [--help]
44
+
45
+ i= : ワイルドカードを含む入力ファイル名【必須】
46
+ o= : 出力ファイル名。全ての結果はここで指定したファイルに出力される。
47
+ o=,O=共に省略した場合は,標準出力に出力される。
48
+ O= : 出力ディレクトリ名。このディレクトリの直下に、各入力ファイルと同じファイル名で出力される。
49
+ cmd= : コマンドライン
50
+ 以下のシンボルは、実行前に入力ファイルの各属性に置換される。
51
+ -----------+-----------------------------------------
52
+ シンボル | 属性
53
+ -----------+-----------------------------------------
54
+ ##file## | ファイル名
55
+ ##name## | ディレクトリ名を除いたファイル名
56
+ ##core## | ディレクトリ名と拡張子を除いたファイル名
57
+ ##ext## | ファイル名拡張子
58
+ ##body## | 拡張子を除いたファイル名
59
+ ##dir## | ディレクトリ名
60
+ ##apath## | 絶対パス名
61
+ ##date## | ファイル作成日付
62
+ ##time## | ファイル作成時刻
63
+ ##size## | ファイルサイズ
64
+ -----------+-----------------------------------------
65
+ try= : 実際に実行する入力ファイル数(テスト目的で利用される)(省略すれば全ファイルに対して実行する)
66
+ mp= : 実行するプロセス数(default:1)
67
+
68
+ 詳細)
69
+ o=が指定された場合、cmd=で指定されたコマンドライン文字列は以下の擬似コードに示されるように修正されてshellに渡される。
70
+
71
+ cmd: cmd=で指定されたコマンドライン文字列
72
+ ofile: 出力ファイル名
73
+ if 最初のファイル
74
+ cmd = cmd + " >ofile"
75
+ else
76
+ cmd = cmd + " -nfno >>ofile"
77
+ end
78
+
79
+ O=が指定された場合の擬似コードは以下の通り。
80
+ cmd: cmd=で指定されたコマンドライン文字列
81
+ opath: 出力ディレクトリ名
82
+ name: 入力ファイル名
83
+ cmd2 = + " >{opath}/name"
84
+
85
+ o=もO=も指定されない場合は以下の通りで、標準出力に出力されるので、パイプで接続ことも可能である。
86
+ cmd: cmd=で指定されたコマンドライン文字列
87
+ ofile: 出力ファイル名
88
+ unless 最初のファイル
89
+ cmd = cmd + " -nfno"
90
+ end
91
+
92
+ 必要なrubyライブラリ)
93
+ nysol
94
+
95
+ 例)
96
+ indat/a01.csv
97
+ a,b,c
98
+ A,x,1
99
+ A,y,2
100
+
101
+ indat/a02.csv
102
+ a,b,c
103
+ B,x,3
104
+ B,y,4
105
+
106
+ indat/a03.csv
107
+ a,b,c
108
+ C,x,5
109
+ C,y,6
110
+
111
+ $ meach.rb i=indat/*.csv o=out1.csv cmd='msetstr v=##date##,##time##,##size## a=date,time,size i=##file## | mcut f=a,b,date,time,size'
112
+
113
+ out1.csv
114
+ a,b,date,time,size
115
+ A,x,20141114,211722,18
116
+ A,y,20141114,211722,18
117
+ B,x,20141114,211722,18
118
+ B,y,20141114,211722,18
119
+ C,x,20141114,211722,18
120
+ C,y,20141114,211722,18
121
+
122
+ # Copyright(c) NYSOL 2012- All Rights Reserved.
123
+ EOF
124
+ exit
125
+ end
126
+
127
+ def ver()
128
+ $revision ="0" if $revision =~ /VERSION/
129
+ STDERR.puts "version #{$version} revision #{$revision}"
130
+ exit
131
+ end
132
+
133
+ def make_scp(cmd,file)
134
+ atime=File.atime(file)
135
+ time=atime.strftime("%H%M%S")
136
+ date=atime.strftime("%Y%m%d")
137
+ size =File.size(file)
138
+ apath=File.absolute_path(file)
139
+ dir =File.dirname(file)
140
+ ext =File.extname(file).sub(".","")
141
+ name =File.basename(file)
142
+ core =name.sub(/\.#{ext}$/,"")
143
+ body =name.sub(".#{ext}","")
144
+ cmd2=cmd.gsub("##file##",file)
145
+ .gsub("##name##",name)
146
+ .gsub("##core##",core)
147
+ .gsub("##time##",time)
148
+ .gsub("##date##",date)
149
+ .gsub("##size##",size.to_s)
150
+ .gsub("##apath##",apath)
151
+ .gsub("##dir##",dir)
152
+ .gsub("##ext##",ext)
153
+ .gsub("##body##",body)
154
+ return cmd2,name
155
+ end
156
+
157
+ def finalact(r_typ,iname,oname,first)
158
+ cmdln = "mcat i=#{iname} "
159
+ case r_typ
160
+ when 1
161
+ cmdln += " -nfno >" unless first
162
+ cmdln += "> #{oname}"
163
+ when 5
164
+ cmdln += " -nfno" unless first
165
+ else
166
+ return
167
+ end
168
+
169
+ system(cmdln)
170
+
171
+ end
172
+
173
+
174
+ help() if ARGV[0]=="--help" or ARGV.size <= 0
175
+ ver() if ARGV[0]=="--version"
176
+
177
+ args=MCMD::Margs.new(ARGV,"i=,o=,O=,cmd=,try=,mp=,-mcmdenv,-stscheck","i=,cmd=")
178
+
179
+ # mcmdのメッセージは警告とエラーのみ
180
+ ENV["KG_VerboseLevel"]="2" unless args.bool("-mcmdenv")
181
+
182
+ #ワークファイルパス
183
+ if args.str("T=")!=nil then
184
+ ENV["KG_TmpPath"] = args.str("T=").sub(/\/$/,"")
185
+ end
186
+
187
+ ifiles = args.str("i=")
188
+ ofile = args.file("o=","w")
189
+ opath = args.str("O=")
190
+ cmd = args.str("cmd=")
191
+ try = args.int("try=")
192
+ mp = args.int("mp=",1)
193
+ stschk = args.bool("-stscheck")
194
+ tim = stschk ? 5 : -1
195
+
196
+ fF = true
197
+
198
+ #################################################
199
+ #実行パターンは6とおり(1-6)
200
+ # mp : 1 || not_1
201
+ # out : Dir(O=) || file(o=) || stdout
202
+ #################################################
203
+ # 1: out=file mp=not_1
204
+ # 2: out=file mp=1
205
+ # 3: out=Dir mp=not_1
206
+ # 4: out=Dir mp=1
207
+ # 5: out=stdout mp=not_1
208
+ # 6: out=stdout mp=1
209
+ #################################################
210
+ run_type = ofile ? 1 : opath ? 3 : 5
211
+ run_type+=1 if mp==1
212
+
213
+
214
+
215
+ files=Dir[ifiles]
216
+ raise "#ERROR# file not found matching wildcard `#{ifiles}'" if files.size==0
217
+ MCMD::mkDir(opath) if opath
218
+
219
+ runlist = Hash.new
220
+ first = true
221
+
222
+ wfx=MCMD::Mtemp.new
223
+ outfname = []
224
+ mp.times{ outfname << wfx.file }
225
+
226
+ ttl = files.size
227
+ nowcnt = 0
228
+ mpm = MCMD::MparallelManager.new(mp,tim)
229
+ mpm.runStateCheker
230
+
231
+ files.each{|file|
232
+ break if try && nowcnt >= try
233
+ cmd2,name = make_scp(cmd,file)
234
+ nowlane = mpm.getLane(false) # ここでは必ず空きがある
235
+ pid=fork{
236
+ #################################################
237
+ # 1: out=file mp=not_1
238
+ # 2: out=file mp=1
239
+ # 3: out=Dir mp=not_1
240
+ # 4: out=Dir mp=1
241
+ # 5: out=stdout mp=not_1
242
+ # 6: out=stdout mp=1
243
+ #################################################
244
+ case run_type
245
+ when 1,5
246
+ cmd2+=" > #{outfname[nowlane]}"
247
+ when 2
248
+ if nowcnt==0 then
249
+ cmd2 += " | mfldname -q > #{ofile}"
250
+ else
251
+ cmd2 += " -nfno >> #{ofile}" unless nowcnt==0
252
+ end
253
+ when 3,4
254
+ cmd2+=" >#{opath}/#{name}"
255
+ when 6
256
+ if nowcnt==0 then
257
+ cmd2 += " | mfldname -q "
258
+ else
259
+ cmd2 += " -nfno "
260
+ end
261
+ end
262
+ system cmd2
263
+ }
264
+ nowcnt+=1
265
+ MCMD::msgLog("meach.rb start #{file} (#{nowcnt}/#{ttl})")
266
+ mpm.addPid(pid,nowlane)
267
+ if mpm.emptyLQ? then
268
+ rpidList = mpm.waitLane
269
+ rpidList.each{|nextAno|
270
+ finalact(run_type,outfname[nextAno],ofile,fF)
271
+ fF=false
272
+ }
273
+ end
274
+
275
+ }
276
+ rpidList = mpm.waitall
277
+ rpidList.each{|nextAno|
278
+ finalact(run_type,outfname[nextAno],ofile,fF)
279
+ fF=false
280
+ }
281
+
282
+ # 終了メッセージ
283
+ MCMD::endLog(args.cmdline)
284
+
@@ -0,0 +1,288 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ #/* ////////// LICENSE INFO ////////////////////
4
+ #
5
+ # * Copyright (C) 2013 by NYSOL CORPORATION
6
+ # *
7
+ # * Unless you have received this program directly from NYSOL pursuant
8
+ # * to the terms of a commercial license agreement with NYSOL, then
9
+ # * this program is licensed to you under the terms of the GNU Affero General
10
+ # * Public License (AGPL) as published by the Free Software Foundation,
11
+ # * either version 3 of the License, or (at your option) any later version.
12
+ # *
13
+ # * This program is distributed in the hope that it will be useful, but
14
+ # * WITHOUT ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF
15
+ # * NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
16
+ # *
17
+ # * Please refer to the AGPL (http://www.gnu.org/licenses/agpl-3.0.txt)
18
+ # * for more details.
19
+ #
20
+ # ////////// LICENSE INFO ////////////////////*/
21
+
22
+ require "rubygems"
23
+ require "nysol/mcmd"
24
+
25
+ # 1.2: mp= parameter 追加
26
+ $version="1.2"
27
+ $revision="###VERSION###"
28
+
29
+ def help
30
+
31
+ STDERR.puts <<EOF
32
+ ----------------------------
33
+ meachc.rb version #{$version}
34
+ ----------------------------
35
+ 概要) 指定したディレクトリに格納された全ファイルに対して同じ処理を行う。
36
+ 入力ファイル毎に結果を出力するか、全ての結果を一つのファイルに出力するかを選択できる。
37
+ 特徴) mcatと同様の動きをするが、各入力ファイルの属性(ファイル名やサイズ、更新日時など)を扱うことが可能である点が異なる。
38
+ * 処理の指定はコマンドラインを文字列として与え、そのままシェルに渡され実行される(入力ファイル毎に)。
39
+ * MCMDだけでなく、実行環境で利用できるコマンドは全て利用可能。
40
+ * 入力データの形式は問わないので、XMLや画像などあらゆるデータを入力ファイルとして扱うことが可能。
41
+ * ただし、出力はo=の場合はCSVでなければならない。O=の場合はどのようなフォーマットであってもよい。
42
+
43
+ 用法) meachc.rb i= [o=|O=] cmd= [try=] [--help]
44
+
45
+ i= : ワイルドカードを含む入力ファイル名【必須】
46
+ o= : 出力ファイル名。全ての結果はここで指定したファイルに出力される。
47
+ o=,O=共に省略した場合は,標準出力に出力される。
48
+ O= : 出力ディレクトリ名。このディレクトリの直下に、各入力ファイルと同じファイル名で出力される。
49
+ cmd= : コマンドライン
50
+ 以下のシンボルは、実行前に入力ファイルの各属性に置換される。
51
+ -----------+-----------------------------------------
52
+ シンボル | 属性
53
+ -----------+-----------------------------------------
54
+ ##file## | ファイル名
55
+ ##name## | ディレクトリ名を除いたファイル名
56
+ ##core## | ディレクトリ名と拡張子を除いたファイル名
57
+ ##ext## | ファイル名拡張子
58
+ ##body## | 拡張子を除いたファイル名
59
+ ##dir## | ディレクトリ名
60
+ ##apath## | 絶対パス名
61
+ ##date## | ファイル作成日付
62
+ ##time## | ファイル作成時刻
63
+ ##size## | ファイルサイズ
64
+ -----------+-----------------------------------------
65
+ try= : 実際に実行する入力ファイル数(テスト目的で利用される)(省略すれば全ファイルに対して実行する)
66
+ mpc= : 実行する端末数(default:3)
67
+ mp= : 実行するプロセス数(default:2)
68
+
69
+ 詳細)
70
+ o=が指定された場合、cmd=で指定されたコマンドライン文字列は以下の擬似コードに示されるように修正されてshellに渡される。
71
+
72
+ cmd: cmd=で指定されたコマンドライン文字列
73
+ ofile: 出力ファイル名
74
+ if 最初のファイル
75
+ cmd = cmd + " >ofile"
76
+ else
77
+ cmd = cmd + " -nfno >>ofile"
78
+ end
79
+
80
+ O=が指定された場合の擬似コードは以下の通り。
81
+ cmd: cmd=で指定されたコマンドライン文字列
82
+ opath: 出力ディレクトリ名
83
+ name: 入力ファイル名
84
+ cmd2 = + " >{opath}/name"
85
+
86
+ o=もO=も指定されない場合は以下の通りで、標準出力に出力されるので、パイプで接続ことも可能である。
87
+ cmd: cmd=で指定されたコマンドライン文字列
88
+ ofile: 出力ファイル名
89
+ unless 最初のファイル
90
+ cmd = cmd + " -nfno"
91
+ end
92
+
93
+ 必要なrubyライブラリ)
94
+ nysol
95
+
96
+ 例)
97
+ indat/a01.csv
98
+ a,b,c
99
+ A,x,1
100
+ A,y,2
101
+
102
+ indat/a02.csv
103
+ a,b,c
104
+ B,x,3
105
+ B,y,4
106
+
107
+ indat/a03.csv
108
+ a,b,c
109
+ C,x,5
110
+ C,y,6
111
+
112
+ $ meachc.rb i=indat/*.csv o=out1.csv cmd='msetstr v=##date##,##time##,##size## a=date,time,size i=##file## | mcut f=a,b,date,time,size'
113
+
114
+ out1.csv
115
+ a,b,date,time,size
116
+ A,x,20141114,211722,18
117
+ A,y,20141114,211722,18
118
+ B,x,20141114,211722,18
119
+ B,y,20141114,211722,18
120
+ C,x,20141114,211722,18
121
+ C,y,20141114,211722,18
122
+
123
+ # Copyright(c) NYSOL 2012- All Rights Reserved.
124
+ EOF
125
+ exit
126
+ end
127
+
128
+ def ver()
129
+ $revision ="0" if $revision =~ /VERSION/
130
+ STDERR.puts "version #{$version} revision #{$revision}"
131
+ exit
132
+ end
133
+
134
+ help() if ARGV[0]=="--help" or ARGV.size <= 0
135
+ ver() if ARGV[0]=="--version"
136
+
137
+ #############################################################################
138
+ # ↑↑↑↑↑  HELP & VRESION  ↑↑↑↑↑↑↑↑↑↑↑↑↑
139
+ #############################################################################
140
+
141
+ def make_scp(cmd,file)
142
+ atime=File.atime(file)
143
+ time=atime.strftime("%H%M%S")
144
+ date=atime.strftime("%Y%m%d")
145
+ size =File.size(file)
146
+ apath=File.absolute_path(file)
147
+ dir =File.dirname(file)
148
+ ext =File.extname(file).sub(".","")
149
+ name =File.basename(file)
150
+ core =name.sub(/\.#{ext}$/,"")
151
+ body =name.sub(".#{ext}","")
152
+ cmd2=cmd.gsub("##file##",file)
153
+ .gsub("##name##",name)
154
+ .gsub("##core##",core)
155
+ .gsub("##time##",time)
156
+ .gsub("##date##",date)
157
+ .gsub("##size##",size.to_s)
158
+ .gsub("##apath##",apath)
159
+ .gsub("##dir##",dir)
160
+ .gsub("##ext##",ext)
161
+ .gsub("##body##",body)
162
+ return cmd2,name
163
+ end
164
+
165
+
166
+ args=MCMD::Margs.new(ARGV,"i=,o=,O=,cmd=,try=,mp=,mpc=,-mcmdenv","i=,cmd=")
167
+
168
+ # mcmdのメッセージは警告とエラーのみ
169
+ ENV["KG_VerboseLevel"]="2" unless args.bool("-mcmdenv")
170
+
171
+ #ワークファイルパス
172
+ if args.str("T=")!=nil then
173
+ ENV["KG_TmpPath"] = args.str("T=").sub(/\/$/,"")
174
+ end
175
+
176
+ ifiles = args.str("i=")
177
+ ofile = args.file("o=","w")
178
+ opath = args.str("O=")
179
+ cmd = args.str("cmd=")
180
+ try = args.int("try=")
181
+ mpLim = args.int("mp=",4)
182
+ mpPC = args.int("mpc=",4)
183
+ pclist = args.str("pclist=","/etc/pclist")
184
+ opath = "#{opath}/" if opath != nil && opath !~ /\/$/
185
+
186
+ #################################################
187
+ # PC_LIST読み込み
188
+ #################################################
189
+ pcM = MCMD::MpcManager.new(pclist)
190
+ mpPC = pcM.pcCount if mpPC > pcM.pcCount
191
+ mpMax = mpPC * mpLim
192
+
193
+ #################################################
194
+ #実行パターンは3
195
+ # out : Dir(O=) || file(o=) || stdout
196
+ #################################################
197
+ # 1: out=file
198
+ # 2: out=Dir
199
+ # 3: out=stdout
200
+ #################################################
201
+ run_type = ofile ? 1 : opath ? 2 : 3
202
+
203
+
204
+ files=Dir[ifiles]
205
+ raise "#ERROR# file not found matching wildcard `#{ifiles}'" if files.size==0
206
+ MCMD::mkDir(opath) if opath
207
+
208
+ runlist = Hash.new
209
+ ttl = files.size
210
+
211
+ # -----------------------------------------------------
212
+ # 作業ディレクトリ決定
213
+ # -----------------------------------------------------
214
+ tempC=MCMD::Mtemp.new
215
+ runScp = tempC.file
216
+ local_WkD = tempC.file
217
+ net_WkD = tempC.file
218
+ MCMD::mkDir(local_WkD)
219
+
220
+
221
+ mpm = MCMD::MparallelManagerByFile.new(mpMax,local_WkD)
222
+ mpm.runStateCheker
223
+
224
+
225
+ nowcnt = 0
226
+ rtnlist =[]
227
+
228
+ files.each{|file|
229
+ break if try && counter >= try
230
+ MCMD::msgLog("m2eachc.rb (#{nowcnt}/#{ttl})")
231
+
232
+ cmd2,name = make_scp(cmd,file)
233
+ nowlane = mpm.getLane # ここでは必ず空きがある
234
+
235
+ pid=fork{
236
+ # データ転送
237
+ stNo = nowlane%mpPC
238
+ net_nowwkD = "#{net_WkD}/#{nowcnt}"
239
+ # -----------------------------------------------------
240
+ # スクリプト生成
241
+ # -----------------------------------------------------
242
+ runscp_N = "#{runScp}_#{nowlane}.sh"
243
+ File.open(runscp_N,"w"){|fpw|
244
+ fpw.puts ("cd #{net_nowwkD}")
245
+ case run_type
246
+ when 1,3
247
+ cmd2 += " > #{net_nowwkD}/#{name}_#{nowcnt}"
248
+ when 2
249
+ cmd2 += " > #{net_nowwkD}/#{name}"
250
+ end
251
+ fpw.puts (cmd2)
252
+ fpw.puts "echo pgmend #{nowcnt} >> #{net_nowwkD}/endlog"
253
+ fpw.puts "ls -lR >> #{net_nowwkD}/endlog"
254
+ fpw.puts "msend.rb i=#{net_nowwkD}/endlog uid=#{pcM.getUID(stNo)} o=#{pcM.localIP}:#{local_WkD}/#{nowlane}.log"
255
+ }
256
+ # -----------------------------------------------------
257
+ # スクリプトファイル&データ転送
258
+ # -----------------------------------------------------
259
+ MCMD::msgLog("m2eachc.rb snddata #{file} (#{nowcnt}/#{ttl})")
260
+ distSrc = "#{net_nowwkD}/#{File.basename(runscp_N)}"
261
+ MCMD::NetTools.send(pcM.getIP(stNo),pcM.getUID(stNo),runscp_N,distSrc ,pcM.getPWD(stNo))
262
+ MCMD::NetTools.send(pcM.getIP(stNo),pcM.getUID(stNo),file ,"#{net_nowwkD}/#{file}",pcM.getPWD(stNo))
263
+
264
+ # -----------------------------------------------------
265
+ # プログラム実行
266
+ # -----------------------------------------------------
267
+ MCMD::msgLog("m2eachc.rb pgmstart #{file} (#{nowcnt}/#{ttl})")
268
+ MCMD::NetTools.cmdRun(pcM.getIP(stNo),pcM.getUID(stNo),"nohup bash #{distSrc} 1> #{net_nowwkD}/RunLog 2>&1 &")
269
+ }
270
+ rtnlist << [ pcM.getIP(nowlane%mpPC),"#{net_WkD}/#{nowcnt}" ]
271
+ mpm.addNo(nowcnt,nowlane)
272
+ nowcnt+=1
273
+ Process.detach(pid)
274
+ }
275
+ mpm.waitall
276
+
277
+ case run_type
278
+ when 1
279
+ rtnlist.mcollect("#{File.basename(ifiles)}_*",ofile)
280
+ when 2
281
+ rtnlist.mcollect(File.basename(ifiles),opath)
282
+ when 3
283
+ rtnlist.mcollect("#{File.basename(ifiles)}_*",nil)
284
+ end
285
+
286
+ # 終了メッセージ
287
+ MCMD::endLog(args.cmdline)
288
+