rxvtからのrebootについて
rxvtからのrebootについて
お世話になります。
Puppy4.3.1JP2012で自宅サーバー構築を試みています。
デスクトップ上から端末を開き、vi で/etc下の定義ファイルを編集した後、
# reboot [enter]
とやってしまうことがあります。この時皆さんのマシンではどうなるでしょう。私のマシンではデスクトップが固まり何が起こっているかわからなくなります。多分、shutdownプロセスが正しく終了されていないのでしょう。
そこで rxvt(端末)からは reboot や poweroff ができないようにロックをかけてしまおうかと思いコマンドの中身を見ました。
-------/sbin/reboot--------
#!/bin/sh
/etc/rc.d/rc.shutdown
exec /bin/busybox reboot
----------------------------
このシェルの起動が rxvt からのものであれば NG のメッセージを echo し、exit してしまおうと思いましたが、自分が誰か whoami コマンドもないので、 ps からプロセスIDと名称を関連付けることもできませんでした。
rxvt から 起動されているということが分かる手段は無いでしょうか。
真の目的は shutdown がきちっと動作し中途半端状態にならないことなので代替手段でも構いません。
Puppy4.3.1JP2012で自宅サーバー構築を試みています。
デスクトップ上から端末を開き、vi で/etc下の定義ファイルを編集した後、
# reboot [enter]
とやってしまうことがあります。この時皆さんのマシンではどうなるでしょう。私のマシンではデスクトップが固まり何が起こっているかわからなくなります。多分、shutdownプロセスが正しく終了されていないのでしょう。
そこで rxvt(端末)からは reboot や poweroff ができないようにロックをかけてしまおうかと思いコマンドの中身を見ました。
-------/sbin/reboot--------
#!/bin/sh
/etc/rc.d/rc.shutdown
exec /bin/busybox reboot
----------------------------
このシェルの起動が rxvt からのものであれば NG のメッセージを echo し、exit してしまおうと思いましたが、自分が誰か whoami コマンドもないので、 ps からプロセスIDと名称を関連付けることもできませんでした。
rxvt から 起動されているということが分かる手段は無いでしょうか。
真の目的は shutdown がきちっと動作し中途半端状態にならないことなので代替手段でも構いません。
最後に編集したユーザー TYpup [ 13/01/19(土) 20:50 ], 累計 2 回
Re: 祖父の名前
確認したいプログラムの呼び出し順は
洗練されてませんが、
こんな感じで確認用のスクリプトを書いてみました。
2層上の起動元のプログラムを特定しています。
ただ、2層上であることが前提なので、別のやり方を探すほうがいいかもしれません。
ファイルに保存して実行してみると…
rxvt からの出力
urxvt からの出力
詳しい方はぜひ書き込んでください(私も知りたいです)
という形だと思っていいんでしょうかね?実行されているスクリプト → bash → bash を呼んだプログラム
洗練されてませんが、
コード: 全て選択
#!/bin/bash
echo "私 pid:"$$
father=$(ps -o ppid -p $$ | tail -n 1)
echo "父 pid:"$father
grandpa=$(ps -o ppid -p $father | tail -n 1)
echo "爺 pid:"$grandpa
ps -o cmd -p $grandpa | echo "祖父の名前(起動元)は:" $(tail -n 1)
2層上の起動元のプログラムを特定しています。
ただ、2層上であることが前提なので、別のやり方を探すほうがいいかもしれません。
ファイルに保存して実行してみると…
rxvt からの出力
コード: 全て選択
# hoge_pid.sh
私 pid:13561
父 pid: 6159
爺 pid: 6155
祖父の名前(起動元)は: rxvt
コード: 全て選択
# hoge_pid.sh
私 pid:13637
父 pid:12084
爺 pid:12083
祖父の名前(起動元)は: /usr/bin/urxvt
最後に編集したユーザー サボり魔 [ 13/01/19(土) 22:56 ], 累計 3 回
サボり魔
Precise-550JP & Precise-571JP & Tahr-Puppy
frugal install (USB)
8GB ASUS H97I-PLUS Core-i5 4690S
8GB ASRock Z68M-ITX/HT Core-i7 2600k with Win7
16GB ASROCK H170M-ITX/ac Core-i5 6600
Precise-550JP & Precise-571JP & Tahr-Puppy
frugal install (USB)
8GB ASUS H97I-PLUS Core-i5 4690S
8GB ASRock Z68M-ITX/HT Core-i7 2600k with Win7
16GB ASROCK H170M-ITX/ac Core-i5 6600
Re: rxvtからのrebootについて
サボり魔様
コメントありがとうございます。
ルーツを探るのは大変ですね。
自分自身がだれか分からなくても自プロセスが $$ で得られるということをすっかり忘れていました。参考になりました。
色々と触っていて、たまたま tty コマンドを発見しました。
端末 rxvt で tty コマンドを実行すると
/dev/pts/n (nは数字 多分rxvtを開いた時のシリアルナンバー)
と返してくれます。
[ctrl]-[Alt]-[F2]で現れるコンソールで tty コマンドを実行すると
/dev/tty2 と返してくれます。
reboot や poweroff コマンドの中で TERMINAL=`tty` が誰か?で判別できるような気がしています。(まだやっていません)
ちなみにデスクトップの[メニュー]-[シャットダウン]-[コンピューターを再起動]をすると、/sbin/rebootを実行していて、rebootの中に仕掛けてみるとtty コマンドの答えは
/dev/tty1 でした。
従って判断可というのがわかりました。ありがとうございました。
(tty と $$ を組み合わせると Whoami ができるかな)
コメントありがとうございます。
ルーツを探るのは大変ですね。
自分自身がだれか分からなくても自プロセスが $$ で得られるということをすっかり忘れていました。参考になりました。
色々と触っていて、たまたま tty コマンドを発見しました。
端末 rxvt で tty コマンドを実行すると
/dev/pts/n (nは数字 多分rxvtを開いた時のシリアルナンバー)
と返してくれます。
[ctrl]-[Alt]-[F2]で現れるコンソールで tty コマンドを実行すると
/dev/tty2 と返してくれます。
reboot や poweroff コマンドの中で TERMINAL=`tty` が誰か?で判別できるような気がしています。(まだやっていません)
ちなみにデスクトップの[メニュー]-[シャットダウン]-[コンピューターを再起動]をすると、/sbin/rebootを実行していて、rebootの中に仕掛けてみるとtty コマンドの答えは
/dev/tty1 でした。
従って判断可というのがわかりました。ありがとうございました。
(tty と $$ を組み合わせると Whoami ができるかな)
最後に編集したユーザー TYpup [ 13/01/19(土) 20:27 ], 累計 1 回
-
- 記事: 10
- 登録日時: 10/05/03(月) 22:49
Re: rxvtからのrebootについて
~/.bashrc あたりで reboot 無効にしただけでもいいのでは?
追記: ;; の行が抜けてました
コード: 全て選択
case "$-" in
*i*)
alias reboot=:
;;
esac
最後に編集したユーザー double_star [ 13/01/20(日) 18:56 ], 累計 1 回
Re: rxvtからのrebootについて
rxvt端末の tty の結果でrebootするかどうか判別しました。
---------/sbin/reboot/-----------
#!/bin/sh
set `tty | sed 's/\// /g'` ; Dev=$1 ; TerminalKind=$2
if [ $TerminalKind = "pts" ] ; then
echo "$0 : $TerminalKind, It is the unsuitable terminal."
exit 1
else
/etc/rc.d/rc.shutdown
exec /bin/busybox reboot
fi
---------------------------------
(あら、TABを活かすにはどうしたら.......)
---------/sbin/reboot/-----------
#!/bin/sh
set `tty | sed 's/\// /g'` ; Dev=$1 ; TerminalKind=$2
if [ $TerminalKind = "pts" ] ; then
echo "$0 : $TerminalKind, It is the unsuitable terminal."
exit 1
else
/etc/rc.d/rc.shutdown
exec /bin/busybox reboot
fi
---------------------------------
(あら、TABを活かすにはどうしたら.......)
最後に編集したユーザー TYpup [ 13/01/19(土) 21:15 ], 累計 1 回
Re: rxvtからのrebootについて
double_star様double_star さんが書きました:~/.bashrc あたりで reboot 無効にしただけでもいいのでは?コード: 全て選択
case "$-" in *i*) alias reboot=: esac
コメントありがとうございます。
デスクトップからの[コンピュータの再起動]やコンソールでのrebootは有効のままでしょうか。であるとすると、シンプルでよいですネ。
Re: rxvtからのrebootについて
今更ですが、とりあえず端末から reboot してみたところ完全にフリーズしました(Wary-5.3.92)。TYpup さんが書きました:この時皆さんのマシンではどうなるでしょう。私のマシンではデスクトップが固まり何が起こっているかわからなくなります。
USB メモリにインストールした複数の Puppy から選択して起動しているので、デスクトップメニューの「再起動」すら使ったことがありませんでした…。
(リストの一番上でないと、結局は手作業で選ばないといけないので)
いやぁ、意外なところに罠があるものですね。
double_star さんの ~/.bashrc への追記を試してみたところ、reboot が端末で無効になりつつもデスクトップメニューからは実行できるのを確認しました。
こういう使い方するんですね…。
そんなに簡単に取れるなんて知りませんでした。シノバー さんが書きました:father=$PPID
起動時のメッセージに書かれているのを目にしてはいたものの、これまで tty を気にしたこともありませんでした。
色々と参考になる話題にお邪魔させていただきました。皆様ありがとうございます。
サボり魔
Precise-550JP & Precise-571JP & Tahr-Puppy
frugal install (USB)
8GB ASUS H97I-PLUS Core-i5 4690S
8GB ASRock Z68M-ITX/HT Core-i7 2600k with Win7
16GB ASROCK H170M-ITX/ac Core-i5 6600
Precise-550JP & Precise-571JP & Tahr-Puppy
frugal install (USB)
8GB ASUS H97I-PLUS Core-i5 4690S
8GB ASRock Z68M-ITX/HT Core-i7 2600k with Win7
16GB ASROCK H170M-ITX/ac Core-i5 6600
Re: rxvtからのrebootについて
私も大変勉強させていただいております。皆様今後ともよろしくお願いいたします。サボり魔 さんが書きました: 色々と参考になる話題にお邪魔させていただきました。皆様ありがとうございます。
(reboot ですが、 Filer からシングルクリックでもダンマリになりました。これはお手上げです。…ネ。)
-
- 記事: 10
- 登録日時: 10/05/03(月) 22:49
Re: rxvtからのrebootについて
そう言えば NFS マウントとかしたまま shutdown すると固まるので、自分は /etc/rc.d/rc.shutdown にちょこっと修正入れてるんだけど、関係ありそうです?
sshfs なんかも駄目だっけかな。
sshfs なんかも駄目だっけかな。
コード: 全て選択
--- /initrd/pup_ro2/etc/rc.d/rc.shutdown 2011-11-08 07:08:28.000000000 +0900
+++ /initrd/pup_rw/etc/rc.d/rc.shutdown 2012-05-10 19:46:35.000000000 +0900
@@ -183,7 +183,7 @@
#111107 ldolse: unmount network shares before taking down the network
#(see 111106, need to do it sooner, but 111106 will remount read-only if failed to umount here)
-for MOUNTPOINT in `mount | grep '^//' | cut -d ' ' -f 3 | tr '\n' ' '`
+for MOUNTPOINT in `mount | awk '/^[^ ]*:/ || /^\/\//{print $3}'`
do
umount -f $MOUNTPOINT
done
Re: rxvtからのrebootについて
double_star様double_star さんが書きました:そう言えば NFS マウントとかしたまま shutdown すると固まるので、自分は /etc/rc.d/rc.shutdown にちょこっと修正入れてるんだけど、関係ありそうです?
sshfs なんかも駄目だっけかな。コード: 全て選択
--- /initrd/pup_ro2/etc/rc.d/rc.shutdown 2011-11-08 07:08:28.000000000 +0900 +++ /initrd/pup_rw/etc/rc.d/rc.shutdown 2012-05-10 19:46:35.000000000 +0900 @@ -183,7 +183,7 @@ #111107 ldolse: unmount network shares before taking down the network #(see 111106, need to do it sooner, but 111106 will remount read-only if failed to umount here) -for MOUNTPOINT in `mount | grep '^//' | cut -d ' ' -f 3 | tr '\n' ' '` +for MOUNTPOINT in `mount | awk '/^[^ ]*:/ || /^\/\//{print $3}'` do umount -f $MOUNTPOINT done
NFSをマウントしているとshutdownで固まるというのはまた新たな課題なのかなと思います。
私の場合 ext4 と FAT32 をマウントしていますが、同じ状態でも console や GUIのメニューからの操作ではOKで、端末からではNGでした。
※スクリプトは mount コマンドの結果から 行の先頭が / または // のものから、mountpoint の文字列を取得し、unmount しているのでしょうか。ご苦労されているのが伺えます。
名犬にしたくなってきました。
Re: rxvtからのrebootについて
私も今更ながら確認しました(Precise Puppy)。確かにrxvtから reboot コマンドでフリーズします。サボり魔 さんが書きました:今更ですが、とりあえず端末から reboot してみたところ完全にフリーズしました(Wary-5.3.92)。TYpup さんが書きました:この時皆さんのマシンではどうなるでしょう。私のマシンではデスクトップが固まり何が起こっているかわからなくなります。
(snip)
double_star さんの ~/.bashrc への追記を試してみたところ、reboot が端末で無効になりつつもデスクトップメニューからは実行できるのを確認しました。
いっぽうデスクトップメニューからのリブートは rebootコマンドではなく、wmreboot を実行しています。rxvtから wmreboot コマンドを実行すると正常に再起動します。また poweroffに相当するのは wmpoeroff です。
したがって .bashrc に alias reboot=wmreboot で解決するのでは。
The bar master, Shino's Bar
http://shinobar.net/
http://shinobar.net/
NFS マウント下での shutdown
この問題は最近のパピーでは修正されています。double_star さんが書きました:そう言えば NFS マウントとかしたまま shutdown すると固まるので、自分は /etc/rc.d/rc.shutdown にちょこっと修正入れてるんだけど、関係ありそうです?
(/etc/rc.d/rc.shutdown のコメント)
#120219 zekebaby: unmount network shares, alternate method. 120220 another alternate method.
pupsaveconfig の最新版 2.2.5 をインストールすることでも解決するはず。
http://shino.pos.to/linux/puppy/
The bar master, Shino's Bar
http://shinobar.net/
http://shinobar.net/
Re: rxvtからのrebootについて
シノバー様ありがとうございます。シノバー さんが書きました:rxvtから wmreboot コマンドを実行すると正常に再起動します。また poweroffに相当するのは wmpoeroff です。
したがって .bashrc に alias reboot=wmreboot で解決するのでは。
rxvtからwmreboot,wmpoeroffの実行でうまく行きました。
.bashrcではなく他にもaliasを定義している /etc/profile に 下記の2行を追記してうまく行っています。
コード: 全て選択
alias reboot=wmreboot
alias poweroff=wmpoweroff