У меня есть этот глупый, не идеальный, но работающий Bash Script
#!/bin/bash
scriptstart="script"
scriptstop="script2"
LogTime=$(date '+[%d.%m.%Y %H:%M:%S]');
Time=$(date '+[%H:%M]');
starttimehc="06:00"
stoptimehc="07:30"
starttime2hc="18:30"
stoptime2hc="21:30"
starttime="$2"
stoptime="$3"
starttime2="$4"
stoptime2="$5"
startnow="$1"
if [ -z "$starttime" ]; then
starttime="$starttimehc"
fi
if [ -z "$stoptime" ]; then
stoptime="$stoptimehc"
fi
if [ -z "$starttime2" ]; then
starttime2="$starttime2hc"
fi
if [ -z "$stoptime2" ]; then
stoptime2="$stoptime2hc"
fi
echo $starttime : $stoptime : $starttime2 : $stoptime2
trap ctrl_c INT
function Log {
echo "$LogTime" " - " "$1" >> /home/pi/Desktop/Lightshow/Logs/TimedShowLog_$(date '+%d.%m.%Y')
echo "$LogTime" " - " "$1"
}
function Start {
# run target script
Log " Lightshow Start at $(date '+%H:%M') "
. $scriptstart
WaitforStop
$SHELL
}
function Stop {
#Stop Lights
Log "Lightshow Stopped at $(date '+%H:%M')"
. $scriptstop;
WaitforStart
}
function WaitforStart {
Log "Waiting For the next time to Start"
while [ $(date '+%H:%M') != $starttime ] || [ $(date '+%H:%M') != $starttime2 ]; do
sleep 10;
done;
Start
}
function WaitforStop {
Log "Waiting For the next time to Stop"
while [ $(date '+%H:%M') != $stoptime ] || [ $(date '+%H:%M') != $stoptime2 ]; do
Log "Still Allive"
sleep 10;
done;
Stop
}
function ctrl_c() {
Log "Lightshow Closed by User at $(date '+%H:%M')"
. $scriptstop;
exit
}
# Starting Point
if [ -z "$startnow" ]; then
echo "Start Lights Now Or Timed?"
select yn in "Now" "Timed"; do
case $yn in
Now ) Start;;
Timed ) WaitforStart;;
esac
done
elif [ "$startnow" == "1" ]; then
Start
elif [ "$startnow" == "0" ]; then
WaitforStart
fi
, который никогда не должен закрываться, так как это время, когда выполняются другие скрипты, скрипт работает нормально, когда я запускаю его в терминале. но так как я хочу иметь контроль над сайтом (разные тайминги / старт / стоп), мне нужно выполнить его через php.
Мой php код:
<?php
$name = $_POST['name'];
ini_set('max_execution_time', 0);
switch ($name) {
case "starttimeddata":
$starttime1 = $_POST['starttime1'];
$stoptime1 = $_POST['stoptime1'];
$starttime2 = $_POST['starttime2'];
$stoptime2 = $_POST['stoptime2'];
echo "First Start : " . $starttime1 . "<br>Stop at : " . $stoptime1 . "<br><hr><br>Second Start : " . $starttime2 . "<br>Stop at : " . $stoptime2 . "";
shell_exec("bash /var/www/html/microweb/cgi-bin/result/bash/Start.sh 1 " . $starttime1 . " " . $stoptime1 . " " . $starttime2 . " " . $stoptime2 . "");
break;
default:
echo "something wrong";
}
?>
это просто плохой способ сделать это? Можно ли запустить скрипт bash, который никогда не закрывается?
как сейчас, скрипт запускается, но закрывается примерно через 5 секунд, я тоже пытался с nohub, но тот же результат
запуск apache2 на Raspberry pi