运行 Python bootup/reboot 上的程序,在 OpenWrt Linux 中的单独分区上
Run Python program on bootup/reboot, on separate partition in OpenWrt Linux
在OpenWrt Linux 上,我在/etc/init.d 文件夹中放置了一个启动脚本,并启用了它。脚本很好,看起来如下:
#!/bin/sh /etc/rc.common
# Automatically place an "S91canpy" symlink in /etc/rc.d/ once we enable it
# This means it will start right after /etc/rc.d/90openvpn
START=91
# This is what will run when this service starts
start() {
# Run the process in the background (&), and direct errors to a log file
sh /user/start_everything.sh >/var/log/init_canpy.log 2>&1 &
}
# This is what will run when the service stops
stop() {
echo "no stop function set up yet"
}
# This is what will run when the service restarts
restart() {
# Run the process in the background (&), and direct errors to a log file
sh /user/start_everything.sh >/var/log/init_canpy.log 2>&1 &
}
它调用的/user/start_everything.sh脚本如下:
#!/bin/sh
# Run the "find_config_data.py" Python program
/data/venv/bin/python3.6 /user/canpy/find_config_data.py
问题是 /data 在一个单独的硬盘分区上,所以 init.d 找不到它。我得到的错误如下:
line 4: /data/venv/bin/python3.6: not found
我的主分区只剩下 20 MB space,所以我必须将 Python 3.6 及其库安装到 /data 分区,该分区有 2.5 GB space.
如何让 init.d 在 /data/venv/bin/python3.6 找到我的 Python 二进制文件? 我绝对必须有这个 Python 程序 运行 每次 Linux boots/reboots。谢谢!!
以下是我的分区设置:
root@FATBOX:/tmp/log# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 476.2M 456.0M 20.2M 96% /
devtmpfs 512.0K 0 512.0K 0% /dev
tmpfs 247.7M 116.0K 247.6M 0% /tmp
tmpfs 512.0K 0 512.0K 0% /dev
/dev/mmcblk0p3 2.7G 50.2M 2.5G 2% /data
我想出了一个替代解决方案,它完成了工作,并确保我的应用程序继续 运行ning(额外的好处)。
我在 cron 中每分钟安排一个进程检查器脚本 运行:
#!/bin/sh
# Checking if /user/canpy/app.py is running
ps | grep -v grep | grep /user/canpy/app.py
if [ $? -eq 0 ]; then
echo "/user/canpy/app.py is running."
else
# If it is not running, start it!
echo "/user/canpy/app.py is not running. Starting it now"
/data/venv/bin/python3.6 /user/canpy/app.py >/var/log/main_app_canpy.log 2>&1 &
fi
这是位于 /etc/crontabs/root:
的 crontab
# Schedule check_running.sh to run every minute
* * * * * sh /user/check_running.sh >/var/log/check_running_canpy.log 2>&1 &
干杯,
肖恩
在OpenWrt Linux 上,我在/etc/init.d 文件夹中放置了一个启动脚本,并启用了它。脚本很好,看起来如下:
#!/bin/sh /etc/rc.common
# Automatically place an "S91canpy" symlink in /etc/rc.d/ once we enable it
# This means it will start right after /etc/rc.d/90openvpn
START=91
# This is what will run when this service starts
start() {
# Run the process in the background (&), and direct errors to a log file
sh /user/start_everything.sh >/var/log/init_canpy.log 2>&1 &
}
# This is what will run when the service stops
stop() {
echo "no stop function set up yet"
}
# This is what will run when the service restarts
restart() {
# Run the process in the background (&), and direct errors to a log file
sh /user/start_everything.sh >/var/log/init_canpy.log 2>&1 &
}
它调用的/user/start_everything.sh脚本如下:
#!/bin/sh
# Run the "find_config_data.py" Python program
/data/venv/bin/python3.6 /user/canpy/find_config_data.py
问题是 /data 在一个单独的硬盘分区上,所以 init.d 找不到它。我得到的错误如下:
line 4: /data/venv/bin/python3.6: not found
我的主分区只剩下 20 MB space,所以我必须将 Python 3.6 及其库安装到 /data 分区,该分区有 2.5 GB space.
如何让 init.d 在 /data/venv/bin/python3.6 找到我的 Python 二进制文件? 我绝对必须有这个 Python 程序 运行 每次 Linux boots/reboots。谢谢!!
以下是我的分区设置:
root@FATBOX:/tmp/log# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 476.2M 456.0M 20.2M 96% /
devtmpfs 512.0K 0 512.0K 0% /dev
tmpfs 247.7M 116.0K 247.6M 0% /tmp
tmpfs 512.0K 0 512.0K 0% /dev
/dev/mmcblk0p3 2.7G 50.2M 2.5G 2% /data
我想出了一个替代解决方案,它完成了工作,并确保我的应用程序继续 运行ning(额外的好处)。
我在 cron 中每分钟安排一个进程检查器脚本 运行:
#!/bin/sh
# Checking if /user/canpy/app.py is running
ps | grep -v grep | grep /user/canpy/app.py
if [ $? -eq 0 ]; then
echo "/user/canpy/app.py is running."
else
# If it is not running, start it!
echo "/user/canpy/app.py is not running. Starting it now"
/data/venv/bin/python3.6 /user/canpy/app.py >/var/log/main_app_canpy.log 2>&1 &
fi
这是位于 /etc/crontabs/root:
的 crontab# Schedule check_running.sh to run every minute
* * * * * sh /user/check_running.sh >/var/log/check_running_canpy.log 2>&1 &
干杯, 肖恩