Задача: в 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-скрипту.