Если аббревиатуры на английском языке приемлемы, R имеет встроенный постоянный вектор month.abb
имен сокращенного месяца. Просто используйте цифровую дату, чтобы индексировать этот вектор сокращенных имен месяцев. Например, использование фиктивных данных:
set.seed(1)
df <- data.frame(A = runif(10), Month = sample(12, 10, replace = TRUE))
здесь несколько опций для индексации month.abb
через Month
:
> with(df, month.abb[Month])
[1] "Mar" "Mar" "Sep" "May" "Oct" "Jun" "Sep" "Dec" "May" "Oct"
> df <- transform(df, MonthAbb = month.abb[Month])
> df
A Month MonthAbb
1 0.26550866 3 Mar
2 0.37212390 3 Mar
3 0.57285336 9 Sep
4 0.90820779 5 May
5 0.20168193 10 Oct
6 0.89838968 6 Jun
7 0.94467527 9 Sep
8 0.66079779 12 Dec
9 0.62911404 5 May
10 0.06178627 10 Oct
Просто добавьте вторую команду после сценария. Когда/если это останавливается, вторая команда вызывается. Например:
php daemon.php 2>&1 | mail -s "Daemon stopped" you@example.org
Технически, это вызывает почтовую программу сразу же, но только завершает команду, когда сценарий PHP заканчивается. Выполнение этого получает вывод сценария PHP и включает в почтовое тело, которое может быть полезно для отладки, что заставило сценарий останавливаться.
Простой сценарий удара
#!/bin/bash
while [true]; do
if ! pidof -x script.php;
then
php script.php &
fi
done
Не для окон, но...
У меня есть несколько продолжительных Сценариев PHP, которые имеют сценарий оболочки, переносящий его. Можно дополнительно возвратить значение из сценария, который будет проверен в сценарии оболочки, чтобы выйти, сразу перезапустить, или сон в течение нескольких секунд - и затем перезапустить.
Вот простой, который просто продолжает управлять Сценарием PHP, пока он вручную не останавливается.
#!/bin/bash clear date php -f cli-SCRIPT.php echo "wait a little while ..."; sleep 10 exec $0
"Исполнительные 0$" перезапускают сценарий, не создавая подпроцесс, который должен будет распутать позже (и поднять ресурсы тем временем). Этот сценарий удара переносит почтового отправителя, таким образом, это не проблема, если он выходит и паузы на мгновение.
Одно возможное решение состоит в том, чтобы иметь его, слушают на порте с помощью функций сокета. Можно проверить, что сокет все еще слушает с простым сценарием. Даже контрольный сервис как pingdom мог контролировать свое состояние. Если это умирает, сокет больше не слушает.
Много решений..Удачи.
Если у Вас есть руки на сценарий, можно просто попросить, чтобы он установил временную стоимость каждые X раз в дб и затем позволил заданию крона проверить, актуально ли то значение.
troelskn записал:
Просто добавьте вторую команду после сценария. Когда/если это останавливается, вторая команда вызывается. Например:
php daemon.php | mail -s "Daemon stopped" you@example.org
Это будет звонить mail
каждый раз строка печатается в daemon.php (который никогда не должен быть, но все еще.)
Вместо этого используйте двойной оператор амперсанда для разделения команд, т.е.
php daemon.php & mail -s "Daemon stopped" you@example.org