在启动/重新启动时运行Python程序,在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 的空间,所以我必须将 Python 3.6 及其库安装到/data 分区上,该分区有 2.5 GB 的空间。

如何让 init.d 在/data/venv/bin/python3.6 找到我的 Python 二进制文件?我绝对必须在每次Linux启动/重新启动时运行这个Python程序。谢谢!!

以下是我的分区设置:

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

我想出了一个替代解决方案,它可以完成工作,并确保我的应用程序继续运行(额外的好处(。

我安排一个进程检查器脚本在 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 &

干杯 肖恩

最新更新