gpt4 book ai didi

python - 在 Bash 中安排 Python 脚本?

转载 作者:太空宇宙 更新时间:2023-11-04 04:00:21 24 4
gpt4 key购买 nike

我是调度 python 脚本的新手,需要启动一个脚本以便它可以运行一两天。我不允许在我的环境中使用 cron,所以我使用这个 bash 脚本。我可以做什么简单测试来确保 python 文件运行?我怎么知道我的文件运行了?而且,如果它抛出错误,我如何才能确保收到通知?任何帮助,将不胜感激。

#!/usr/bin/bash

while true
do
DATE="$(date +'%d')"
MONTH="$(date +'%m')"
YEAR="$(date +'%Y')"
HOUR="$(date +'%H')"
MINUTE="$(date +'%M')"
if ([ "$DATE" = "27" ]) && [ "$HOUR" = "12" ] && [ "$MINUTE" = "30" ]
then
/my_file.py
sleep 24h
fi
done

最佳答案

我添加了一个小片段。

使用变量 TRIGGER,您可以选择脚本(cron.sh 或您的类(class) cron.py)应该执行的日期第一次启动。

WAIT 确定脚本运行 (cron) 和下一次运行(例如 5 分钟24小时)在我的示例中,我只是等待 5 分钟直到下一次运行。

然后我们检查启动脚本 cron.sh 的进程 ID 是否存在并对此使用react:

  • PID 不可用且返回值不为零:我们需要重新启动脚本。出现错误。
  • PID 不可用且返回值为零:增加触发器(等待时间)。没有错误。

请注意,这只是一种方法,非常快速和肮脏。这应该只演示如何做到这一点。您现在可以使用它并实现您自己的功能(通知、日志记录等)

另外:

  • 您可以检查 cron 脚本启动的频率。例如,设置重新启动 cron 的限制。如果 cron-script 连续多次失败,您应该停用它并通知用户。

  • 如果您希望在脚本多次失败时收到通知,我个人喜欢发送邮件的选项:Send Mail via Terminal

  • 使用数组和循环,可以监控多个 Python 或 bash 脚本。

#!/usr/bin/bash

# Select how long between each run should be waited
WAIT="5 minutes"


process_started=false
tmp_pid=0

# For starting a detached process
startProcess() {
./cron.sh &>/dev/null &
tmp_pid=$(echo $!)
process_started=true;
return 0
}


# Make the current date to the staring point
TRIGGER=$(date +'%d-%m-%y-%H-%M')
echo "Starting Point: $TRIGGER"

while true
do
# Check for the trigger
if [ $(date +'%d-%m-%y-%H-%M') = "$TRIGGER" ]; then
# No process has been stared. Start the proces now
if [ "$process_started" = false ]; then
startProcess
echo "Started script: " $(date +'%d-%m-%y %H:%M:%S') " (PID $tmp_pid)"
fi

# Check for existence
if ! kill -0 $tmp_pid > /dev/null 2>&1; then
echo "No process found with pid $tmp_pid" >&2
# Now, no process has been found.
# We can check of the exit code to determine
# if the process has exited normally
wait ${tmp_pid}
if [ $? -eq 0 ]; then
echo "Script exited normal: " $(date +'%d-%m-%y %H:%M:%S')" . Waiting another $WAIT"
# Process has been exited normally.
# Resetting the trigger.
TRIGGER=$(date +'%d-%m-%y-%H-%M' -d "$WAIT")
echo "New run in $WAIT: $TRIGGER"
else
echo "Script exited with an error"
# Here. e. g. Start the script again
startProcess
echo "Retarted script: " $(date +'%d-%m-%y %H:%M:%S') " (PID $tmp_pid)"
fi
fi
sleep 1s
fi
done

这当然也适用于 python 脚本。只需更改函数 startProcess:

startProcess() { 
./cron.py &>/dev/null &
tmp_pid=$(echo $!)
process_started=true;
return 0
}

并且不要忘记在您的 cron.py 文件中包含 #!/usr/bin/env python3


使用以下 cron.sh

x=1
while [ $x -le 5 ]
do
x=$(( $x + 1 ))
sleep 1s
done
exit 0

您将收到输出:

Starting Point: 20-10-19-05-22
Started script: 20-10-19 05:22:36 (PID 86402)
No process found with pid 86402
Script exited normal: 20-10-19 05:22:46. Waiting another 5 minutes
New run in 5 minutes: 20-10-19-05-27

关于python - 在 Bash 中安排 Python 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58469601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com