ども、こんにちは。 tarフォーマットのフロッピーは、フォーマットという概念はなく、 データがベタで書かれたものだと思います。 こういうベタで書かれたものは、UNIXなら % dd if=/dev/fd0 of=hoge % cp /dev/fd0c hoge % cat /dev/fd0c > hoge で取り出せます(ご存知かもしれませんが念のため)。 Win環境でUNIXのブートフロッピーを作る場合などは、rawrite.exeなど 使ってフロッピーにベタで書き込みますが、この逆のことをしてくれる ツールがあればいいのだと思います。 で、そういうツールはあるか、というと…わかりません(^^; rawrite.exeに読み出しモードがあるか調べるとか、Winのtarの マニュアルを調べてみる、とか…。 またまたお役に立てませんでしたね。 |
はじめまして UNIXのデータを、Windows95のパソコンで整理することはできないでしょうか? 私は、印刷会社に勤務して、パソコンのオペレータをしております。 で、勤め先なのですが、UNIXをOSとする組版機(業務用のワープロですね) を使って、印刷の版下を編集・制作しています。 ところが、社内にUNIXの分かる人間が皆無で、これまでに蓄積した膨大なデータを 効率的に管理する方法が分かりません。 一応、組版機同士はLANで結ばれ、ハードディスクやMOなども、導入されており、 編集の段階では使っているのですが、作成後のデータの管理には、役に立っていないよう です。 このため、編集後のデータはフロッピーディスクに保存して、手書きの台帳で管理して います。 すでに、何千枚ものフロッピーが、保管されているのですが、未だに、月百枚ペースで 3.5インチのFDが増え続けています。 何とかしたいと思うのですが、残念ながら、私もUNIXは全く素人です。 で、思い立ったのですが、UNIXのデータが書き込まれたFDを、ウィンドウズの パソコンで読み込み、ハードディスクに保存する方法はないものでしょうか? とりあえず、FDの読み書きと、ハードディスクへの転送ができれば良いのです。 ネットワークの構築も、プリンタの接続もいりません。 原始的な使用法とは思いますが、それだけでも大助かりです。 まことに恐れ入ります、どなたか糸口だけでもご教示下さい。 よろしく、お願いいたします。 |
ども、ごぶさたです。 遂に胃カメラ飲むとこまでいってしまったROLです。 いや、きいてはいたけど苦しいもんですね、あれは…(涙) さてさて、例のスクリプトの件ですが、 telnetで調べた結果サーバー側にnkfとtarはあることが判明。 サーバーの管理者から使用許可をいただきました。 あとはhttpdownなんですが、きちんとインストールするのであれば 使用してかまわないとのことでしたので、 httpdownをインストールして、スクリプトはそのまま使う方向にかえました。 というか、openで他のサーバーのファイルを開こうとするとエラーを起こすみたいなんですけど httpdownを使ってるのって、これのからみなんでしょうか? |
1. 「組版機同士はLANで結ばれ」ということで、そのLANにWinマシンを繋げて、 FTPでファイル転送する(ほんとはファイルサーバでデータを共有できれば いいんでしょうけど)。 2. 「ハードディスクやMOなども導入されており」ということで、UNIXで作ったMOを Winマシンで読む。 3. 「ハードディスクやMOなども導入されており」ということで、(UNIX上から) MOに編集後のデータを保存しておく。 あたりでしょうか…。 1なら、ケーブル繋げてWinマシンにIPアドレスとネットマスク設定して、(もし必要なら) DNSサーバのIPアドレス入力するだけでOKかと思います。 2だとUNIXで作ったMOのフォーマットがufs(UNIXフォーマット)か、DOSフォーマットか、 あるいはそれ以外か、というところで引っかかるかもしれませんね。 3がお手軽かと思うんですが、ちょっと文面からはわかりませんが、MOやHDDでなく フロッピーで保存しなければならない事情があるんでしょうね。 > すでに、何千枚ものフロッピーが、保管されているのですが、未だに、月百枚ペースで > 3.5インチのFDが増え続けています。 うーん、それは大変ですねぇ(^^; 数千枚のFDをコピーするのは嫌だなぁ。 でも本当に困っておられるなら、ソフト屋やネットワーク屋に金を払って、 UNIXとWinマシンでデータを共有できるようにするとか、UNIXあるいはWin上での 台帳管理ソフトを作ってもらう、ってのをお勧めしますよ。 # ↑不況を知らない学生の発想かも。社会に出ると上司に # 「そんなものに金は出せん。君がなんとかしろ!」 # とか言われるのでしょうか(^^; |
> というか、openで他のサーバーのファイルを開こうとするとエラーを > 起こすみたいなんですけどhttpdownを使ってるのって、これのからみなんでしょうか? えっと、ちょっと状況がよくわかりませんが、 とりあえずhttpdownの使い方を説明します。 level 1 (1段階リンクをたどる) httpproxy http://proxy.hogehoge.com:8080/ (proxyを使うなら) reportlevel 2 (なくてもいいです) start http://www2.sega.co.jp/bbs/t/test/1_index.html (落としたいURL) という内容のhttpdown.cnfというファイル(ファイル名はなんでもいいですが)を 作って、コマンドラインから % httpdown httpdown.cnf とすると、カレントディレクトリ以下に www2.sega.co.jp/bbs/t/test/1_index.html が作成されます。それに相当することをg2で行っているのが、 sub download { open(OUT,">$base_dir/sega2.def"); print OUT "level 1\n"; print OUT "httpproxy $proxy\n"; print OUT "reportlevel 2\n"; print OUT "start http://www2.sega.co.jp/bbs/t/test/$_[0]\n"; close(OUT); system("$httpdown $base_dir/sega2.def > /dev/null"); } openで読めるのは、そのサーバ上にあるファイルだけですから、 こうやって一度ファイルを落とした後にopenして読み込むわけです。 その前に、httpdownのコンパイルは終りましたか? http://www.mechatronics.mech.tohoku.ac.jp/~kumagai/bins/kuma/httpdown-3.13.tar.gz を落して、UNIX上で、 % gzip -dc httpdown-3.13.tar.gz | tar tvf - でアーカイブの一覧が見られます。 % gzip -dc httpdown-3.13.tar.gz | tar xvf - で展開です。そしたらhttpdown313というディレクトリが出来ているはずなので、 % cd httpdown313 % make とすると、コンパイルが始まって、そのディレクトリにhttpdownというコマンドができます。 もしコンパイル中にエラーで止まってしまったらMakefileを修正すればいいでしょう。 # その場合、uname -aの結果とmakeした結果全てを見せてください。 > 遂に胃カメラ飲むとこまでいってしまったROLです。 会社に入るとやっぱりストレス溜るんでしょうか… お大事に… |
makeの結果こういうメッセージが出ました。 エラーですね -------- gcc -c http.cc gcc -c parse.cc gcc -c flist.cc gcc -c httpdown.cc gcc -c url.cc gcc -c ftp.cc gcc -c makedef.cc gcc -c match.cc gcc http.o parse.o flist.o httpdown.o url.o ftp.o makedef.o match.o -o httpdow n -lresolv ld: cannot open -lresolv: No such file or directory make: *** [httpdown] Error 1 ------------ でMakefileの内容です ---------- # makefile for httpdown # please use c++ compiler CC = gcc # # linker library options # # default(SunOS 4.1.1-JL 1 sun4c) LIBS= -lresolv # SunOS 5.5 Generic sun4c sparc # LIBS= -lnsl -lsocket -lresolv # SunOS 4.1.4 2 sun4m # LIBS= -lresolv -l44bsd # AIX # LIBS= # Linux # LIBS= # HP-UX # LIBS= # if some errors with 'gethostname' occured, try to comment out # next line. # GETHOSTNAME = -DNEED_GETHOSTNAME # if debugging (for core dump analysis) # DEBUG = -g # compile option COPT = $(GETHOSTNAME) $(DEBUG) OBJS = http.o parse.o flist.o httpdown.o url.o ftp.o makedef.o match.o httpdown: $(OBJS) $(CC) $(COPT) $(OBJS) -o httpdown $(LIBS) urlget: urlget.o url.o ftp.o http.o $(CC) $(COPT) urlget.o url.o ftp.o http.o -o urlget $(LIBS) http.o: http.cc http.h url.h $(CC) $(COPT) -c http.cc ftp.o: ftp.cc ftp.h url.h $(CC) $(COPT) -c ftp.cc url.o: url.cc url.h $(CC) $(COPT) -c url.cc parse.o: parse.cc httpdown.h $(CC) $(COPT) -c parse.cc flist.o: flist.cc http.h httpdown.h $(CC) $(COPT) -c flist.cc makedef.o: makedef.cc $(CC) $(COPT) -c makedef.cc httpdown.o: httpdown.cc httpdown.h http.h url.h ftp.h $(CC) $(COPT) -c httpdown.cc urlget.o: urlget.cc $(CC) $(COPT) -c urlget.cc match.o: match.cc match.h $(CC) $(COPT) -c match.cc ---------- ここまでくるとワシには何がなんやらさっぱり(笑) |
Makefileの LIBS= -lresolv を LIBS= に変更して もっかいmakeしてください。 > ここまでくるとワシには何がなんやらさっぱり(笑) C言語はソースコードをコンパイルするとともに、既に コンパイル済の部品(=ライブラリ)を組み合わせて(=リンクして) バイナリを作成するんです。 そのコンパイル済の部品の名前が、OSごとに少しずつ違う わけです。例えば -lresolv は /usr/lib/libresolv.aが あることを期待しているんですが、ROLさんとこのサーバには そのファイルがなかったのでエラーになったわけっすね。 |
>openで読めるのは、そのサーバ上にあるファイルだけですから、 >こうやって一度ファイルを落とした後にopenして読み込むわけです。 あ、やっぱり。 openって他のサーバーのファイルは開けないのか。 おかげで、httpdownの役割というか重要性も理解できました。 あとは各ディレクトリの設定をやり直すだけで取りあえず動くはず… でも、この脱力感はなんでしょうね? 過去ログをとるスクリプトを理解することが目的になってしまってるような気がする。 っていうか、あそこの現状を見るに、過去ログそのものの 存在の意義を見出せなくなってきている自分に気がついた… |
お師さん、こんにちは。 「その他」での書きこみを見て、ふと気がつくと… 何故か手元にFreeBSD 2.2.Jの箱が… と、いうわけで、性懲りも無くまた手をだしてしまい ました。まあ、ゆっくりとやっていきますです。 で、さっそく質問ですが…(^^; Xの画面(解像度)の事なんですが、僕の設定では 1280*1024でちょうどXの画面がディスプレイのワクに ばちっとはまるようになっているのですが、解像度を 変えると(800*600等)画面がディスプレイのワクから はみでてしまいます。ただ、カーソルを画面のワクの ほうへ動かせばスクロールするので使用するのには 別に問題はありませんが、「解像度が変わっても ディスプレイのワクにばちっとはまんねーかなぁ」 とふと思ったので、ちょっとお聞きしたかっただけです。 お師さんの画面ではそういう問題はありませんでしたか? |
あ…2.2.6Jだった。6を落としてしまった。 失礼しました。 それでは。 |
> 解像度を変えると(800*600等) これは、Ctrl-Alt-`+'などで解像度を変更した場合ですか? もしそうなら、ルートウィンドウサイズはそのままで、画面の 一部分を拡大しているだけなので、無理なんじゃないかなぁ。 あるいはウィンドウマネージャの再起動でなんとかなるかも しれませんが…。 後から試してみます。 > あ…2.2.6Jだった。6を落としてしまった。 高級なパッケージをお持ちで(笑) > でも、この脱力感はなんでしょうね? 興味のないことを無理にやってても つらいだけなのは 十分理解できますので、やめちゃってもいいですよ。 こんなの義務でも何でもないんだし。 どーでもいいことやってても、それはただの時間の浪費です。 どうなさるかは おまかせします。 |
なるへそ。なんとなくわかった(ような)気がします。 >これは、Ctrl-Alt-`+'などで解像度を変更した場合ですか? そうです。だって、設定ファイル(でしたっけ)等の いじりかたがまだよくわからないので、お手軽にでき る方法しかやってませんのですよ。 でも後は自分でなんとかなると思います。 (でもいつになることやら。過去ログのリジェクトログ 付きの文を無理やり見る方法を教えてもらった時は 教えてもらってからできるまで○ヵ月かかってたしなぁ… あ、やべっ!また怒られちゃう(^^;) ご教授どうもでした。 |
>どーでもいいことやってても、それはただの時間の浪費です。 >どうなさるかは おまかせします。 ん〜、取りあえずスクリプトが動くようになるまで、 がんばってみるつもりです。 ただ、スクリプトがマトモに動いたからといって、 ログをとるかどうかはそのときの気分次第っていうことで(笑) だってすでに目的と手段が入れ代わってるんだもん(爆) |
> だってすでに目的と手段が入れ代わってるんだもん(爆) A4集計を始めた理由 1. httpクライアントが書けたから。 2. POST形式のデータ送信方法がわかったから。 3. こんなことができるんだぞ〜と自慢したかったから。 最初から動機が不純でした(笑) |
UNIXでの日本語環境のことしりたいです! |
どもども、ROLっす。 g2のその後ですが、スクリプト自身は動いてるようなんですが test-logディレクトリに1998-12-19.tgzと testbbs-log.htmlの2ファイルはできてます。 でも、できてるだけ。 容量がそれぞれ1kと0K。 どうやらhttpdownでうまく落とせてない模様。 おっかしいなぁ??? プロキシがおかしいのかな??? プロキシってどこのでも問題ないですよね? |
$base_dir = "$home/test00"; # 作業用ディレクトリ が存在しないのではないでしょうか。別のディレクトリ名に していただいてもOKです。 $home/test00/sega2.def にhttpdown用の設定ファイルを作って、httpdownは $home/test00/www2.sega.co.jp $home/test00/www2.sega.co.jp/bbs $home/test00/www2.sega.co.jp/bbs/t $home/test00/www2.sega.co.jp/bbs/t/test と再帰的にディレクトリを掘っていきます。 ぱかぽこさん: > UNIXでの日本語環境のことしりたいです! 「UNIXでの日本語環境」と言っても ・FreeBSDかLinuxか、あるいは その他のUNIX系OSか、 ・Linuxなら、どのディストリビューションか などで結構違いますので、これだけではなんとも… |
User Agent統計を見て… HI-UXは、僕です(^^;。 なんでも日立のHI…なのかどうかは知りませんが、 とにかく日立が関係してるようです。 そんだけしか知らない…(汗) また、ブラウザのchimeraも僕です(たぶん) なんかいろいろ試したかったもんで。 いや、だからなんだってわけじゃあないんですが。 |
&init_work; # ディレクトリ作成 & tarball展開 exit; としてテストを実行してみたところ、サーバーからエラーがかえってきています。 その状態では確かにtest00はできてます。 なので&init_work;の後半部分 if ( -f "$log_dir/$date.tgz" ){ system("mkdir -p $main_dir/"); # print "extract $log_dir/$date.tgz\n"; # system("$tar zxf $log_dir/$date.tgz -C $main_dir"); } が問題なんでしょうね…多分。 で、ここの if ( -f "$log_dir/$date.tgz" ){ の-fが何なのかが全然分かってないので、手がつけられないんですが… |
> とにかく日立が関係してるようです。 どうもです。早速更新しました。 > が問題なんでしょうね…多分。 事前に ~/test00 と ~/public_html/test-log をmkdirして おけば大丈夫だとは思うんですが、どうでしょう。 > の-fが何なのかが全然分かってないので 本買いましょ〜。 ファイルが存在するかどうかのチェックです。/hoge/file というファイルが存在すれば、-f "/hoge/file" は真に なります。 # 他には # -f ファイルがあるか # -d ディレクトリがあるか # -r 読み込み権限があるか # てな感じです。あと20個くらいはあったはず。 既にその日のアーカイブが存在する →少し前にg2を実行した →いちいち全部落とすのは時間がかかる →事前に展開しておけば、時間の節約 というわけで、動作チェックをしている場合は # if ( -f "$main_dir/$1" ){ next; } の行のコメントをはずすと、既にあるファイルは落とさなく なるはずです。 今日の分をもちまして過去ログ作成は終了しますので、 あとはROLさんにまかせたっ。ではではでは。 |
すんません、お師さん。原因はそれじゃないみたいです。 ちょこちょこかえて、「$base_dir/www2.sega.co.jp/bbs/t/test/」ディレクトリが出来るとこまでは確認しましたが、 「test00」内に「sega2.def」と「sega2.def~」が出来てます。 で、$base_dir/www2.sega.co.jp/bbs/t/test/内に何もダウンロードされてません。 「sega2.def」の中身を見ると 「reportlevel 2 start http://www2.sega.co.jp/bbs/t/test/1_index.shtml >following lines are automatically generated by httpdown E http://www2.sega.co.jp/bbs/t/test/1_index.shtml」 ってなってます。 これはつまりHTTPDOWNが巧く働いてないって事ですよね? これはなんでなのかわかんないっす。 もういいかげん、いやになられたとは思いますが、すみませんが ご教授くださいませ。 |
sega2.defの内容を level 1 start http://www2.sega.co.jp/bbs/t/test/1_index.shtml にして試してみてください。 # コマンドラインから % httpdown sega2.def それでもダメなら level 1 httpproxy http://hoge.fuga:8080/ start http://www2.sega.co.jp/bbs/t/test/1_index.shtml と、適切なproxyを設定してやるとどうなりますか? |
追加 それぞれ出来たsega.defの内容です。 sega2.def~ 「level 1 httpproxy http://www.cs.gunma-u.ac.jp:8080/ reportlevel 2 start http://www2.sega.co.jp/bbs/t/test/1_index.shtml」 sega2.def 「level 1 httpproxy http://www.cs.gunma-u.ac.jp:8080/ reportlevel 2 start http://www2.sega.co.jp/bbs/t/test/1_index.shtml >following lines are automatically generated by httpdown E http://www2.sega.co.jp/bbs/t/test/1_index.shtml」 実はproxyを2、3変えて実験してみたんですが、 同じ内容しか出来ないのでオリジナルの g2の「httpproxy http://www.cs.gunma-u.ac.jp:8080/」に してみた結果がこれです。 やっぱり、CGIを動かすサーバーのPROXYを設定したほうがよいのでしょうか?HTTPDOWNには…? |
えっと、www.cs.gunma-uのproxyには、外部の人は接続できないはずです。 いつも使っているproxyを設定してください。 もしサーバ上から % telnet www.sega.co.jp 80 GET / HTTP/1.0(リターン) (もいっかいリターン) として、HTMLが出力されるならproxyは必要ないはずですが、 もしダメなら適切なproxyを設定する必要があります (外部のポート80宛のパケットは通さない設定なのでしょう) |
% telnet www.sega.co.jp 80 GET / HTTP/1.0(リターン) (もいっかいリターン) 実行したらHTMLが出力されました!!! ってことで、変数の定義の所の $proxy =以下と &download内の print OUT "level 1\n"; print OUT "httpproxy $proxy\n"; の2行を削除して、やってみます!!! |
はじめまして。 えっと、学校の端末でzipを解凍することはできないんですか? そもそもunixではzipはだめなのですか? おしえてください |
ROLさん: print OUT "level 1\n"; は削らない方がいいでしょう。これはリンクを1段階たどる、ということを 表しています。 ケースケさん: UNIXでZIPを扱えるアーカイバにはunzipというのがあります。 # ZIP形式は普段使わないのでよくわかりませんが、 # unzipは展開専用、zipは圧縮専用かなぁ? これはflute.cs.gunma-u.ac.jpで、ってことですよね? どうやらインストールされてないようですから、管理者にお願いしたり ソースからコンパイルする方がいいんでしょうけど、それがめんどくさいなら ( find / -name unzip >/dev/tty ) >& /dev/null などで探せます。数分待てばいくつか表示されるので、お好きな ものを使うといいでしょう。 |
やっと…、やっとDLまではこぎつけました、はぁ長かった… まぁまだまだ問題は山済み状態なんですが、一番大きな山はこえたのだと思ってます。 で、残された、私ではなんともならない問題… そう、自動化です。 以前、某氏から触りの部分だけ、聞いたはずなんですか さっぱり忘れてます。 なので、どういうファイル名のファイルか、 そしてそのファイルの中身でどういう指事をすれば 任意のCGIを任意の時間に自動的に動かすことができるのか… これを御教授ください。 |
まずは http://X68000.startshop.co.jp/~68user/unix/prgmemo.html#crontab をどうぞ。 ~/.crontabにいつどんなプログラムを実行するか書いてください。 毎日6時30分に実行するなら、 30 6 * * * command です。g2をどこに置いたかは知りませんが、ホームディレクトリからの ディレクトリ相対指定で動くはずです。例えば 30 6 * * * bbs/g2 など。わからなければ 30 6 * * * /home/user/bbs/g2 とフルパスで書いてください。 ~/.crontabに書いたら、 % crontab ~/.crontab で登録されます。 % crontab -l として 30 6 * * * bbs/g2 と表示されればOKです。 しかしその前にきちんと動くかどうか、簡単なテストをしてください。 #!/usr/local/bin/perl print "test OK!\n"; というスクリプトを書いて、chmod +x して、そのとき22:55なら 数分後、例えば23:00に実行されるようにしてください。~/.crontabに 0 23 * * * script と書いて、 % crontab ~/.crontab とします。 % crontab -l 0 23 * * * script となれば登録は正常に行われています。で、23:00になったら、test OK! という内容のメールが送られてきたらいいわけです。 crontabについて さらに詳しいことは http://www.jp.freebsd.org/cgi-bin/yoyaku/mroff.cgi?sect=5&bgcolor=%23ffffff&cmd=&lc=1&subdir=man&dir=jpman-2.2.8%2Fman&subdir=man&man=crontab をどうぞ。 わからなければまた聞いてください。 > 任意のCGIを任意の時間に自動的に動かすことができるのか… 細かいことですが、webサーバ経由で実行されるプログラムを CGIと言います(ほんとは、その仕組み自体がCGIなんですけど)。 今回はwebサーバは関与しませんから、プログラムとか スクリプトと言った方がいいですね。 |
お師さん、いつもすみませんです。 お教えいただいた crontab とその説明ってFreeBSDのですよね。 BIGのサーバーは Linux 2.0.36で動いてるようで まず「~/.crontab」って名前でファイルがおけなかったので 適当に名前を変えて、% crontab script を実行してみましたが 「bash: /usr/bin/crontab: Permission denied」っていわれて、ダメです。 んで、「whitch crontab」で crontabコマンドを探すと 「whitch: command not found」っていわれちゃいます。 どないしたらよいのでしょうか? あぁ、もうまったく手が出ない世界にアシを突っ込んでるな… |
僕の場合.crontabというファイル名にしているだけで、 他のファイル名でも全く構いません。 > 「whitch crontab」で crontabコマンドを探すと whichですよね。whitchじゃなくて。 > bash: /usr/bin/crontab: Permission denied ん〜、とりあえず、 % ls -l `where crontab` (「'」ではなく「`」で囲んでください) と % ls -l `which crontab` の結果を教えてください。あと、 % id の結果も。もしかしたらbigではcronは使えないように なってるのかもしれません。その場合は、管理者に お願いするしかないです。 |
え、それぞれの結果です ls -l `where crontab` bash: where: command not found total 1 lrwxrwxrwx 1 root root 22 Oct 30 16:29 ftp -> /home/ftp/pub/usr8 /rol/ drwxr-xr-x 5 rol users8 1024 Jan 10 18:08 html/ ls -l `which crontab` /bin/ls: which:: No such file or directory /bin/ls: no: No such file or directory /bin/ls: crontab: No such file or directory /bin/ls: in: No such file or directory /bin/ls: (/bin:/usr/bin:/usr/local/bin:/usr/X11/bin:/usr/andrew/bin:/usr/openwin /bin:/usr/games:.): No such file or directory id uid=14127(rol) gid=107(users8) groups=107(users8) てな所ですが、どうなるでしょ? |
もいっかい。 % ls -l /usr/bin/crontab でお願いします。 |
ls -l /usr/bin/crontab -rwx------ 1 root bin 9008 Aug 24 1997 /usr/bin/crontab* って結果です。 ってこれって、オーナーしか動かせないって事…(涙) |
その通りです。管理者にお願いしてみましょう。その結果ダメだと 言われたら残念ながらcronは不可、ということになります。 # ソース持ってってコンパイルとか…したいですか? |
だ、だめです、お師さん >自動起動系のものはサーバーの保守の関係上、 >いかなる理由があろうとも一切禁止です。 だそうです(涙) MacでAppleScriptで毎日サーバーにTelnet接続して スクリプト起動させるようにする…しかないか? (出来るかどうかは解らんけど…) |
うーん、仕方がないと言えば仕方がないですね。管理者が そういう方針を取ることは理解できます。 結局は6:30に起動するプロセスがあれば、その中で g2を実行すればいいわけです。内部にきっかけとなる プロセスを用意することができないなら、外部から 呼ぶという手もあります。AppleScriptも一つの手ですね。 他には ・6:30に自動的にbigの中のあるwebを取得するように して、その中でCGIを動かしておく。そのCGIの中で g2を実行(CGIは普通nobody権限で動くので、そこら へんに問題あり)。 ・6:30に自動的にbigにメールを送る。.forwardに メールが届くとあるプログラムが起動するように しておいて、現在時刻が6:30付近ならg2を実行 とかとか。 |
こちらでは、はじめまして。 「ネットワークプログラミングの基礎知識」を読ませて頂きました。 で、本題の方は、向こうで話題にしてしまったので(^^; ちょっとズレた質問で申し訳ないのですが、「inetdの役割」で 「UNIXでは現在実行中のプログラムのことをプロセスといいます」 という定義がありますよね。 この「プロセス」というものがもう一つよく分からないのです (inetdの説明上では理解できるんですが…)。 「実行中」というのは、1つのプロセスのプログラムがexecで 切り替わった場合も、プロセスとしては同じだという意味で 受け取っていいのでしょうか? また、プロセスというのは、カーネルがスケジュールに従って 実行時間を割り当てる単位と考えてもいいのでしょうか? それから、UNIXではプロセスを生成できるのはforkだけだと聞きますが、 forkって親プロセスのメモリイメージとレジスタを丸ごとコピーする んですよね。この場合、子プロセスが直ぐにexecでプログラムを切り替えても、 メモリ上には親プロセスのコピーがそのまま残るんでしょうか? (execで切り替わったプログラムが終了しても、子プロセスがまだ 実行を続けるかも知れないので、こんなコピーの残骸で一杯になりそうな 気がするのです…) それと、マルチプロセスと関連のありそうな言葉として、タスク、スレッド、 コンカレント、コルーチンなどとの相違も教えて頂ければうれしいです。 スレッドは、プロセス内プロセスみたいなもの…? コルーチンは、Windowsの3.1以前のアプリケーションみたいなもの…? なんか、ネットワークとぜんぜん関係ないなぁ…すいませんです(^^; |
mmさん、はじめまして(とか言ってみたりして(笑)) > execで切り替わった場合も、 > プロセスとしては同じだという意味で > 受け取っていいのでしょうか? #!/usr/local/bin/perl if ( $pid = fork ){ print "子プロセスは$pidです。\n"; sleep 2; system("ps aux|grep $ENV{USER}|grep perl"); print "\n"; sleep 4; system("ps aux|grep $ENV{USER}|grep -E '(perl|sleep)'"); wait; } else { sleep 4; exec("sleep 5"); } # fork、ps、子プロセスがexec(sleep)、psという順番で動くように、 # ところどころにsleepを入れてます。 を実行したところ、 子プロセスは714です。 zxr400 713 0.8 1.6 712 988 p2 S+ 7:25AM 0:00.02 perl fork (perl5.00404) zxr400 714 0.0 1.5 648 956 p2 S+ 7:25AM 0:00.00 perl fork (perl5.00404) zxr400 713 0.0 1.5 712 944 p2 S+ 7:25AM 0:00.02 perl fork (perl5.00404) zxr400 714 0.0 0.1 172 60 p2 S+ 7:25AM 0:00.00 sleep 5 となります。プロセス番号714の子プロセスが、exec sleep 5しても やはりプロセス番号は714のまま、ということだと思います。 > また、プロセスというのは、カーネルがスケジュールに従って > 実行時間を割り当てる単位と考えてもいいのでしょうか? 僕もそういうふうに理解しています。 > execで切り替わったプログラムが終了しても、子プロセスがまだ > 実行を続けるかも知れないので、こんなコピーの残骸で一杯になりそうな > 気がするのです… execが戻ってくるのはexecに失敗したときだけで、execの実行に成功すると 絶対に戻って来ません。だから元のプロセスのイメージを保持しておく 必要はないですから、OSが掃除してくれるんじゃないでしょうか。 > タスク、スレッド、コンカレント、コルーチン うーん、僕もよく知らないんですが…。スレッドに関しては、 > スレッドは、プロセス内プロセスみたいなもの…? でいいのかなぁ。 Javaではスレッドを使うことでプロセスの中で並列実行ができます よね。一方「マルチスレッド版echoサーバ」というのは、ただ単に 「並列処理ができるよ」くらいの意味ですが、別にスレッドを 使っているわけではなく、forkで実現しています。 また、FreeBSDではスレッドへの対応が進み、スレッドセーフな OSになりつつあるようです。 というわけで、「スレッド」という言葉はどの環境を指して 使うかで結構意味に違いがあるんじゃないかと思うんですが…。 あと、「タスク」はUNIXの用語でしたっけ。多分Winの用語かな と思うんですが、結局ここらへんはプロセスと呼ぶかタスクと 呼ぶかの違い、単純に呼称の違いではないかと思ってるんですが…。 コンカレント・コルーチンは初めて聞きました(^^; |