Я использую CentOS 7, и моя цель - создавать cron каждые пять секунд, но, как я исследовал, мы можем использовать cron только на минуту, поэтому сейчас я создал файл оболочки.
hit.sh
while sleep 5; do curl http://localhost/test.php; done
но я ударил его вручную, щелкнув правой кнопкой мыши.
Я хочу создать службу для этого файла, чтобы я мог запускать и останавливать его автоматически.
Я нашел скрипт для создания сервиса
#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....
# Source function library.
. /etc/init.d/functions
start() {
# code to start app comes here
# example: daemon program_name &
}
stop() {
# code to stop app comes here
# example: killproc program_name
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
# code to check status of app comes here
# example: status program_name
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
esac
exit 0
Но я не знаю, что писать в методах start или stop. Я попытался поместить в них тот же контент hit.sh, start(){}
но он дал ошибку для }
метода stop.
/usr/bin/myscript
нормально, когда вы запускаете его самостоятельно? Каковы результаты,echo $?
когда скрипт завершил выполнение? Это 203?/usr/bin/myscript.sh
отлично работает на терминале иecho$?
дал мне1
Ответы:
Если вы хотите повторно использовать пример кода, он может выглядеть примерно так:
Естественно, сценарий, который вы хотите выполнить как сервис, должен идти, например
/usr/local/bin/hit.sh
, и вышеупомянутый код должен идти/etc/init.d/hitservice
.Для каждого уровня запуска, для которого требуется эта служба, вам нужно создать соответствующую символическую ссылку. Например, именованная символическая ссылка
/etc/init.d/rc5.d/S99hitservice
запустит службу для уровня запуска 5. Конечно, вы все равно можете запустить и остановить его вручную черезservice hitservice start
/service hitservice stop
источник
systemd
сценарий, поэтому суффикс не требуется. Вы должны быть в состоянии запускать старые скриптыsystemd
просто отлично. Ты пробовалsystemctl enable hitservice
?Я считаю, что CentOS 7 и выше использует systemd. Если это так для вашей системы, попробуйте следующее:
Разместите команды сценария, в которых вы хотите выполнить
/usr/bin/myscript
.Не забудьте сделать скрипт исполняемым с
chmod +x
.Создайте следующий файл:
/etc/systemd/system/my.service
Перезагрузите все служебные файлы systemd:
systemctl daemon-reload
Убедитесь, что он работает, запустив сервис с
systemctl start my
.Бонус:
Для тестирования службы systemd можно запустить среду tmux с двумя оконными панелями, где верхнее окно контролирует вывод скрипта (
stdout
иstderr
), а нижнее окно можно использовать для перезапуска сервисов. Это требуетtmux
установки, а затем просто:Затем перезапустите сервис с помощью:
Выход
tmux
сctrl-d
и затемctrl-c
.источник
Type=forking
. Скорее всего, это понадобится запрашивающему,Type=simple
но в целом разветвление не рекомендуется: 0pointer.de/public/systemd-man/… . Люди берут свои старые сценарии инициализации и оборачивают их,systemd
чтобы запустить их службуsystemd(init-script(service))
. Однакоsystemd
это замена для сценариев инициализации, поэтому вы должны вызывать службу напрямую,systemd
чтобы она выглядела такsystemd(service)
.Это мой скрипт как сервис:
источник
Посмотрите на Fpm. Это инструмент, который создаст сценарии инициализации для вас. Работает на многих платформах (systemd, upstart, ect ..)
https://github.com/jordansissel/fpm
источник
См. Проект Bash Service Manager : https://github.com/reduardo7/bash-service-manager.
Пример реализации
Пример использования
источник