モブ沢工房

プログラミングとかLinux関連(特にOSSのグラフィックツール関連)とかレトロゲームとか3Dプリンタやら日曜大工等、色々。

[ubuntu] upstartを書いてみる [14.04]

この記事はfc2から引っ越した記事です

何故か突然の実家マシン不調により…

  • ブート後のログイン画面で30秒ほど固まる
  • その後、入力可能状態になる
  • しかし、ログインするとsysv init(/etc/init.d)のmayuが「何故か落とされている」(/var/run/にpidファイルはある)


という現象が起きるようになってしまいました。

そこで、upstartのrespawnで落とされても立ち上がるように何とかしようと思い立ちました。
しかしこれがまた全くうまく行かないどころか、respawnを設定してしまったがために、何かmayuがおかしな状態になった時も何度killallしても勝手にすぐ立ち上がってくるという…w

それにしても全くうまく行かない。普通にupstart(/etc/init/mayu.conf)に書いても、確かに呼ばれることは呼ばれるのですが、何故か「キーボードデバイスをopenできない、rootでやっているのか」とmayuが言うのです。
ここでupstartの柔軟性が役に立ち、テンポラリなログファイルにmayu.confが呼ばれた時の/dev/input/* やら/dev/event*やらをlsさせたのですが、ちゃんと存在しているのですね。
まぁ確かに$USERの中身は空だったんですが、普通に考えてupstartで何の指定もしていないのにアドミニストレーターでないわけがないと思うのですが…mayuのソースも確認しましたが別にrootかどうかを厳密に見ているわけではなく、単にopen出来ない時にルートかどうか警告を発しているだけでした。

これだけで昨日から何十回ブートしたでしょうか(苦笑)

ようやく動くものができたので置いておきます。/etc/init/mayu.confです。
ちなみに、respawnはやめることにしました。

description "mayu"

start on desktop-session-start

script
LOGFILE=/tmp/mayu.log
# .mayuの置いてあるホームディレクトリを設定してください
export HOME=/home/dothiko
exec /usr/local/bin/mayu  >> $LOGFILE 2>&1
end script


なんとシンプル…これでとりあえず用が足せるようになりました。

なにやら調べるとupstartスクリプトでは、先日も探求したdbusのイベントをトリガとして設定できるようなのですが、これを使うと「自作専用アプリでroot権限が必要な処理を気軽に叩き起こせる」ような気がしますね。まぁ使いドコロはあまりない気がしますがw

しかし、どうもubuntuは、というか、debianupstartからsystemdに移行するようですね。
せっかくちょっと習得したのに〜orz

upstartもこうして使ってみると、やはりsysv initよりずっと先進的で色々出来るな〜と感心したのですが、まぁdebianが移行するのだからsystemdとやらは更に良いものなのでしょう。


ところで、直接の関係は無いと思われるのですが、その後更に調べると…なんか、本体のルートUSBハブが死んでいるようなのですが…USBメモリやカードリーダーをエラーでマウントしない or 全く認識してくれない、という。(何故か外付けハブは無事)
その時のdmsgsは、こんな感じです。

[  158.161195] usb 2-1.2: new high-speed USB device number 8 using ehci-pci
[  173.211123] usb 2-1.2: device descriptor read/64, error -110
[  188.364833] usb 2-1.2: device descriptor read/64, error -110
[  188.540638] usb 2-1.2: new high-speed USB device number 9 using ehci-pci
[  203.590436] usb 2-1.2: device descriptor read/64, error -110
[  218.744099] usb 2-1.2: device descriptor read/64, error -110
[  218.919942] usb 2-1.2: new high-speed USB device number 10 using ehci-pci
[  229.312462] usb 2-1.2: device not accepting address 10, error -110
[  229.384448] usb 2-1.2: new high-speed USB device number 11 using ehci-pci
[  239.777067] usb 2-1.2: device not accepting address 11, error -110
[  239.777205] hub 2-1:1.0: unable to enumerate USB device on port 2
[  343.277155] usb 1-1.1.4: new high-speed USB device number 9 using ehci-pci
[  343.371437] usb 1-1.1.4: New USB device found, idVendor=14cd, idProduct=6700
[  343.371442] usb 1-1.1.4: New USB device strings: Mfr=1, Product=3, SerialNumber=2
[  343.371445] usb 1-1.1.4: Product: USB 2.0  SD/MMC READER
[  343.371448] usb 1-1.1.4: Manufacturer: SDMMC M121
[  343.371450] usb 1-1.1.4: SerialNumber: 836343000000
[  343.387044] usb-storage 1-1.1.4:1.0: USB Mass Storage device detected
[  343.387096] scsi8 : usb-storage 1-1.1.4:1.0
[  343.387150] usbcore: registered new interface driver usb-storage


mayuが起動してくれなくなった現象についても、もしかすると何か関係があるのかもですが、その時は知らなかったため上記の解決策を取りました。

何故か突然の実家マシン不調により…

  • ブート後のログイン画面で30秒ほど固まる
  • その後、入力可能状態になる
  • しかし、ログインするとsysv init(/etc/init.d)のmayuが「何故か落とされている」(/var/run/にpidファイルはある)


という現象が起きるようになってしまいました。

そこで、upstartのrespawnで落とされても立ち上がるように何とかしようと思い立ちました。
しかしこれがまた全くうまく行かないどころか、respawnを設定してしまったがために、何かmayuがおかしな状態になった時も何度killallしても勝手にすぐ立ち上がってくるという…w

それにしても全くうまく行かない。普通にupstart(/etc/init/mayu.conf)に書いても、確かに呼ばれることは呼ばれるのですが、何故か「キーボードデバイスをopenできない、rootでやっているのか」とmayuが言うのです。
ここでupstartの柔軟性が役に立ち、テンポラリなログファイルにmayu.confが呼ばれた時の/dev/input/ やら/dev/eventやらをlsさせたのですが、ちゃんと存在しているのですね。
まぁ確かに$USERの中身は空だったんですが、普通に考えてupstartで何の指定もしていないのにアドミニストレーターでないわけがないと思うのですが…mayuのソースも確認しましたが別にrootかどうかを厳密に見ているわけではなく、単にopen出来ない時にルートかどうか警告を発しているだけでした。

これだけで昨日から何十回ブートしたでしょうか(苦笑)

ようやく動くものができたので置いておきます。/etc/init/mayu.confです。
ちなみに、respawnはやめることにしました。

description "mayu"

start on desktop-session-start

script LOGFILE=/tmp/mayu.log

.mayuの置いてあるホームディレクトリを設定してください

export HOME=/home/dothiko exec /usr/local/bin/mayu >> $LOGFILE 2>&1 end script


なんとシンプル…これでとりあえず用が足せるようになりました。

なにやら調べるとupstartスクリプトでは、先日も探求したdbusのイベントをトリガとして設定できるようなのですが、これを使うと「自作専用アプリでroot権限が必要な処理を気軽に叩き起こせる」ような気がしますね。まぁ使いドコロはあまりない気がしますがw

しかし、どうもubuntuは、というか、debianupstartからsystemdに移行するようですね。
せっかくちょっと習得したのに〜orz

upstartもこうして使ってみると、やはりsysv initよりずっと先進的で色々出来るな〜と感心したのですが、まぁdebianが移行するのだからsystemdとやらは更に良いものなのでしょう。


ところで、直接の関係は無いと思われるのですが、その後更に調べると…なんか、本体のルートUSBハブが死んでいるようなのですが…USBメモリやカードリーダーをエラーでマウントしない or 全く認識してくれない、という。(何故か外付けハブは無事)
その時のdmsgsは、こんな感じです。

[  158.161195] usb 2-1.2: new high-speed USB device number 8 using ehci-pci
[  173.211123] usb 2-1.2: device descriptor read/64, error -110
[  188.364833] usb 2-1.2: device descriptor read/64, error -110
[  188.540638] usb 2-1.2: new high-speed USB device number 9 using ehci-pci
[  203.590436] usb 2-1.2: device descriptor read/64, error -110
[  218.744099] usb 2-1.2: device descriptor read/64, error -110
[  218.919942] usb 2-1.2: new high-speed USB device number 10 using ehci-pci
[  229.312462] usb 2-1.2: device not accepting address 10, error -110
[  229.384448] usb 2-1.2: new high-speed USB device number 11 using ehci-pci
[  239.777067] usb 2-1.2: device not accepting address 11, error -110
[  239.777205] hub 2-1:1.0: unable to enumerate USB device on port 2
[  343.277155] usb 1-1.1.4: new high-speed USB device number 9 using ehci-pci
[  343.371437] usb 1-1.1.4: New USB device found, idVendor=14cd, idProduct=6700
[  343.371442] usb 1-1.1.4: New USB device strings: Mfr=1, Product=3, SerialNumber=2
[  343.371445] usb 1-1.1.4: Product: USB 2.0  SD/MMC READER
[  343.371448] usb 1-1.1.4: Manufacturer: SDMMC M121
[  343.371450] usb 1-1.1.4: SerialNumber: 836343000000
[  343.387044] usb-storage 1-1.1.4:1.0: USB Mass Storage device detected
[  343.387096] scsi8 : usb-storage 1-1.1.4:1.0
[  343.387150] usbcore: registered new interface driver usb-storage


mayuが起動してくれなくなった現象についても、もしかすると何か関係があるのかもですが、その時は知らなかったため上記の解決策を取りました。