NAS で python を使って、m3u8 ファイルを読み込んでいました。
最近、NAS の不具合でリセットする羽目になりその python がおかしくなってしまいました。
python プログラムそのものは動くのですが、cron がうまく動いてくれません。
NAS に python プログラムを作成してそれを cron で動かしていました。
* 13 * * * root for i in `seq 0 10 59`;do (sleep ${i}; python /volume1/bak/iptv/python/hoge.py) & done;
でもこれがリセット後に動かなくなりました。
chatGPT にも相談したのですが、どうにも解決できません。
python /volume1/bak/iptv/python/hoge.py
は動くのですが。
linux に転向して 8 年ほど経ちましたが、こういうことは経験していませんでした。
通常ユーザーでは以下のようにして m3u8 をインポートすることが可能なのに、
moheno@NAS720:~$ python
Python 3.8.15 (default, Nov 24 2022, 04:20:39)[GCC 12.2.0] on linuxType "help", "copyright", "credits" or "license" for more information.>>> import m3u8>>>
sudo -i で root に昇格するとエラーになります。
moheno@NAS720:~$ sudo -i
root@NAS720:~# python
Python 3.8.15 (default, Nov 24 2022, 04:20:39)[GCC 12.2.0] on linuxType "help", "copyright", "credits" or "license" for more information.>>> import m3u8Traceback (most recent call last): File "<stdin>", line 1, in <module>ModuleNotFoundError: No module named 'm3u8'
なので、cron を root ではなくて通常ユーザーにしたら動くようになりました。
* 13 * * * moheno for i in `seq 0 10 59`;do (sleep ${i}; python /volume1/bak/iptv/python/hoge.py) & done;
ログは必ず記録した方がいいです。
* 13 * * * moheno for i in `seq 0 10 59`;do (sleep ${i}; python /volume1/bak/iptv/python/hoge.py >> /path/to/cron.log 2>&1) & done;
このログはエラーも補足されますが、エラーが出なくても記録されるようです。
一応、python には以下のように書きました。
import urllib.requestimport m3u8import os
def dn(): playlist = m3u8.load('https://hoge.m3u8')
for i, segment in enumerate(playlist.segments): # tsファイルのパス uri = segment.absolute_uri print(uri) object_name = '/volume1/bak/iptv/hoge/ts/' + uri[uri.rfind('/') + 1:] print(object_name) urllib.request.urlretrieve(uri, object_name)
if __name__ == '__main__': dn()