2011年まで「俺的な非 UN*X 環境をめざして」という題でしたが、 「UNIX系」と「非UNIX系」の区別がだんだん難しくなってきましたので、 あれこれ区別しないことにしました(^_^;
[前] PCの起動を早くしたい! 2008/11b |
自分の管理下にないPCを使っていると、 20〜30分くらい放置しておくとPCが勝手に休止(サスペンド?)して あわててしまう、なんてことはよくあります。でも、たとえば 「今から一時間だけは休止してほしくないなー」なんて時も あったりします。そんなときは「コントロールパネル」の 「電源オプション」の項目をいじってやるのが普通なんですが、 自分にマシンの管理権限がなかったりするとそれもできない。 ‥でも、そんなことって、ある? というと、私の場合、あります。 出先にあるPCでちょっとhttpd(Apache)[URL]を あげて‥なんてときに困るんですよね。 サーバだから、と しばらく放置しておくとサーバが勝手に休止しちゃって 「ちょー、サーバにつながらないよ」と苦情を言われて驚く、みたいな。 まあ私の場合は「管理者パスワードを教えて」とか 「ちょっとPCの設定を変えてくれ」なんてお願いをしても大丈夫な 立場にあるはずですので、そうすりゃいいじゃん、と思わないことも ないんですけど「持たなくてよい管理者権限は持たない」 「ちょっとした思い付きで共用PCの設定を変えてはいけない」主義の 私としましては、やはり、管理者権限とか設定変更なしでも それくらい何とかしたいところです。
そこで。とりあえず、こんな感じのバッチファイルを書いてみました:
ここで sleep というのは、 UnxUtils 等に含まれる sleep.exe です。「sleep 30」というのは 「30秒、待っとれ!」という意味ですね。%BIN% で示された場所に、 UnxUtils や JPERL などの実行ファイルをまとめて置いてあることが このバッチファイルの前提となってます。
@echo off rem # no-sleep.bat --- 無限ループするので C-c 等で終了してね set BIN=\Apps\usr-local\bin :main %BIN%\JPERL no-sleep.prl %BIN%\sleep 170 goto main exit
そして次はいよいよ、 数秒程度のあいだCPUに負荷をかけるプログラムですけど、 ここでは日頃使い慣れた Perl (JPERL) を使います。 以下のような感じで書いてみました。とりあえず log 関数 を何度も何度もしつこいくらい繰り返しながら時折時刻を 参照し、スクリプトの実行開始から5秒程度経過したのを 確認したら終了、という中身になってます。
上に示したバッチファイルでは、このスクリプトは約3分弱おきに一度 呼び出される感じになってましたので、その関係で、 「2分以上放置したらスタンバイ」のような、きわめて短時間での タイマーだと通用しませんが、私が手元のPC (Win2000/WinXP) で 試してみたかぎりでは、このバッチファイルを動かしている間は PCは休止・スタンバイに入ることはないようです。
## $worksecs 秒のあいだ、とにかくシステムに負荷をかける :D $worksecs = 5; $limitx = time + $worksecs; &calc_2; exit; sub calc_2 { while(true) { &calc_1; local($dnow) = time; if($limitx < $dnow) { last; } } } sub calc_1 { local($a) = 100; while(0 < $a) { local($i) = log($a + 10); $a--; } }
JavaScript版 [URL]も作ってみました。うまく動いてくれるといいですけど‥。
[次] バッチファイルをハックせよ 2008/10e |