Задача: в CentOS запускать некий скрипт "test.py" при старте и выключении компьютера от имени некоего пользователя.
Для ее решения напишем init-скрипт, например "status_sender" и поместим его в каталог /etc/rc.d/init.d/
Содержимое init-скрипта:
#!/bin/bash
# chkconfig: 35 99 01
# description: Send system status
# processname: status_sender
. /etc/rc.d/init.d/functions
username="username"
lock_file=/var/lock/subsys/status_sender
log_datetime=`date -u +"%F %T"`
start(){
touch "$lock_file"
daemon --user=$username /usr/local/bin/python2.7 "/home/$username/test.py" "Service started at $log_datetime UTC" &>/dev/null &
}
stop(){
rm -f "$lock_file"
daemon --user=$username /usr/local/bin/python2.7 "/home/$username/test.py" "Service stopped at $log_datetime UTC" &>/dev/null &
}
case "$1" in
start)
start
;;
stop)
stop
;;
*)
echo $"Usage: $0 {start|stop}"
exit 2
esac
exit 0
Скрипт готов, запускаем создание символических ссылок в соответствующих настройкам каталогах.
Это можно сделать и вручную, но зачем?
chkconfig --add status_sender
Проверить результат можно командой
chkconfig --list status_sender
Настройки того, куда и с какими именами будут создаваться симлинки, задаются в строке "chkconfig: 35 99 01".
Это означает, что скрипт будет актуален для запуска системы с уровнем 3 и 5,
причем старт осуществлять после загрузки всех сервисов (99), а останавливать в первую очередь (01).
Запуск от имени пользователя осуществляется с помощью конструкции
daemon --user=$username
где "$username" - имя пользователя в системе, а "&>/dev/null" предотвращает вывод скрипта в консоль.
Команда "daemon" и другие служебные функции находятся в файле "/etc/rc.d/init.d/functions", поэтому
его мы импортируем в самом начале.
"lock_file" - служебный файл, который позволяет системе определять, запущен ли сервис и нужно ли его
останавливать, запуская скрипт с параметром "stop" при выключении или презагрузке.
Если его не создавать, то будет осуществляться только запуск скрипта, а если не удалять - то только остановка.
Для системных сервисов такой файл создается автоматически, для пользовательских же его необходимо создать самостоятельно.
"log_datetime" - это строка даты и времени в UTC для передачи python-скрипту.