2022年01月19日

pt3カードに関わるサービス起動のsystemd化。python日記-16

学習の成果がちょっぴり出ました。

/etc/rc.local3.py
#!/usr/bin/env python3

import os
import subprocess

os.chdir('/dev/dvb')

for ADAPTER in [ 0,1,2,4 ]:
for int1 in [ 20,21,22,23 ]:
dirname = 'adapter' + str(int1)
os.makedirs(dirname, exist_ok=True)
os.chown(dirname, 0, 0)
os.chmod(dirname, 0o755)
completed = subprocess.run(['/usr/bin/nice', '--4', \
'/usr/local/bin/fuse_b25', '--target', '/dev/dvb/adapter0', \
'/dev/dvb/adapter20', '-o', 'allow_other'])
completed = subprocess.run(['/usr/bin/nice', '--4', \
'/usr/local/bin/fuse_b25', '--target', '/dev/dvb/adapter1', \
'/dev/dvb/adapter21', '-o', 'allow_other'])
completed = subprocess.run(['/usr/bin/nice', '--4', \
'/usr/local/bin/fuse_b25', '--target', '/dev/dvb/adapter2', \
'/dev/dvb/adapter22', '-o', 'allow_other'])
completed = subprocess.run(['/usr/bin/nice', '--4', \
'/usr/local/bin/fuse_b25', '--target', '/dev/dvb/adapter3', \
'/dev/dvb/adapter23', '-o', 'allow_other'])


/etc/systemd/system/rc-local2.service

[Unit]
Description=/etc/rc.local3.py Compatibility

[Service]
Type=oneshot
ExecStart=/etc/rc.local3.py
TimeoutSec=0
StandardInput=tty
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target



$ sudo systemctl enable rc-local2.service
$ sudo reboot


systemdのサービスにできなかったときと、
何が変わったか、申しますと、rc.local3.pyの
下4行のインデントを外したことだけです。

ループなしで、いちいち仮想アダプタにつなげているのに、
for文でループさせちゃっていました。とにかく、シェルスクリプト
と違って、インデントに大きな意味があるんですね。

正しくない状態で、xfce4の「自動開始アプリケーション」で
どうして動いてくれていたのか、判りません。

仮想アダプタにつなげるのもループさせて、
1行で済ませられるはずなのですが、
スクリプトに持ち込んだunixコマンドの中で
pythonの設定変数を利かせる方法をまだ理解していません。

収穫としては、systemdのサービスは
pythonのスクリプトであっても動かせるということです。


posted by ブログ開設者 at 22:06| Comment(0) | linux | このブログの読者になる | 更新情報をチェックする