DietPi - 运行 脚本手动工作 - 但从 postboot.d 开始抛出 I/O 错误
DietPi - running a script manually works - but starting from postboot.d throws I/O error
我正在尝试 运行 使用 DietPi 启动 Raspberry 时自动执行脚本。
我的脚本启动一个 Python3 程序,然后在最后启动一个外部程序 MP4Box,它将 2 个视频文件合并到我的 lighttp 网络服务器文件夹中的 mp4。
当我手动启动脚本时一切正常。但是当脚本在启动时自动启动时,当涉及到外部程序 MP4Box 时,我得到一个错误:
Cannot open destination file /var/www/Videos/20201222_151210.mp4: I/O Error
启动我的 pythons 的脚本是“startcam”——位于文件夹 /var/lib/dietpi/postboot.d
#!/bin/sh -e
# Autostart RaspiCam
cd /home/dietpi
rm -f trigger/*
python3 -u record_v0.1.py > record.log 2>&1 &
python3 -u motioninterrupt.py > motion.log 2>&1 &
postboot.d 中的 readme.txt 说:
# /var/lib/dietpi/postboot.d is implemented by DietPi and allows to run scripts at the end of the boot process:
# - /etc/systemd/system/dietpi-postboot.service => /boot/dietpi/postboot => /var/lib/dietpi/postboot.d/*
# There are nearly no restrictions about file names and permissions:
# - All files (besides this "readme.txt" and dot files ".filename") are executed as root user.
# - Execute permissions are automatically added.
# NB: This delays the login prompt by the time the script takes, hence it must not be used for long-term processes, but only for oneshot tasks.
所以它也应该以 root 权限启动我的脚本。这就是引发错误的脚本“record_v0.1.py”的(部分):
import os
os.system('MP4Box -fps 15 -cat /home/dietpi/b-file001.h264 -cat /home/dietpi/a-file001.h264 -new /var/www/Videos/file001.mp4 -tmp ~ -quiet')
当我手动启动 python 程序(以 root 身份登录)时:
/var/lib/dietpi/postboot.d/startcam
一切正常,我收到的消息不是错误:
Appending file /home/dietpi/Videos/b-20201222_153124.h264
No suitable destination track found - creating new one (type vide)
Appending file /home/dietpi/Videos/a-20201222_153124.h264
Saving /var/www/Videos/20201222_153124.mp4: 0.500 secs Interleaving
感谢每一个提示
与描述相反,postboot.d 中的脚本未以 root 身份执行。所以我将脚本更改为:
#!/bin/sh -e
# Autostart RaspiCam
cd /home/dietpi
rm -f trigger/*
sudo python3 -u record_v0.1.py > record.log 2>&1 &
sudo python3 -u motioninterrupt.py > motion.log 2>&1 &
现在他们是 运行 root 并且一切正常。
我正在尝试 运行 使用 DietPi 启动 Raspberry 时自动执行脚本。 我的脚本启动一个 Python3 程序,然后在最后启动一个外部程序 MP4Box,它将 2 个视频文件合并到我的 lighttp 网络服务器文件夹中的 mp4。
当我手动启动脚本时一切正常。但是当脚本在启动时自动启动时,当涉及到外部程序 MP4Box 时,我得到一个错误:
Cannot open destination file /var/www/Videos/20201222_151210.mp4: I/O Error
启动我的 pythons 的脚本是“startcam”——位于文件夹 /var/lib/dietpi/postboot.d
#!/bin/sh -e
# Autostart RaspiCam
cd /home/dietpi
rm -f trigger/*
python3 -u record_v0.1.py > record.log 2>&1 &
python3 -u motioninterrupt.py > motion.log 2>&1 &
postboot.d 中的 readme.txt 说:
# /var/lib/dietpi/postboot.d is implemented by DietPi and allows to run scripts at the end of the boot process:
# - /etc/systemd/system/dietpi-postboot.service => /boot/dietpi/postboot => /var/lib/dietpi/postboot.d/*
# There are nearly no restrictions about file names and permissions:
# - All files (besides this "readme.txt" and dot files ".filename") are executed as root user.
# - Execute permissions are automatically added.
# NB: This delays the login prompt by the time the script takes, hence it must not be used for long-term processes, but only for oneshot tasks.
所以它也应该以 root 权限启动我的脚本。这就是引发错误的脚本“record_v0.1.py”的(部分):
import os
os.system('MP4Box -fps 15 -cat /home/dietpi/b-file001.h264 -cat /home/dietpi/a-file001.h264 -new /var/www/Videos/file001.mp4 -tmp ~ -quiet')
当我手动启动 python 程序(以 root 身份登录)时:
/var/lib/dietpi/postboot.d/startcam
一切正常,我收到的消息不是错误:
Appending file /home/dietpi/Videos/b-20201222_153124.h264
No suitable destination track found - creating new one (type vide)
Appending file /home/dietpi/Videos/a-20201222_153124.h264
Saving /var/www/Videos/20201222_153124.mp4: 0.500 secs Interleaving
感谢每一个提示
与描述相反,postboot.d 中的脚本未以 root 身份执行。所以我将脚本更改为:
#!/bin/sh -e
# Autostart RaspiCam
cd /home/dietpi
rm -f trigger/*
sudo python3 -u record_v0.1.py > record.log 2>&1 &
sudo python3 -u motioninterrupt.py > motion.log 2>&1 &
现在他们是 运行 root 并且一切正常。