Описание тега image-manipulation
Я довольно новыми для программирования для Linux, и инит.D скрипты, и у меня есть проблема с моим инициализации.D скрипт взято из примера я нашел через много поиск в Google. Вместо получения статуса, запуск или остановка или перезапуск, мой демон появляется как другой процесс, неважно, что я делаю. Демон работает, как ожидалось, добавление записи в системный журнал каждую минуту. На самом деле, это работает, когда мультипликаторы работают, лесозаготовки запись с интервалом в одну минуту в каждом, в зависимости от того, когда они начинают.
Мой демон 'sbecd'
код #include <sys файлы/типы.ч>
#включают в файле <sys/стат.ч>
#включить заголовочный файл <stdio.ч>
#включить <stdlib.ч>
#включить <флагов.ч>
код #include <errno значение.ч>
#включить <запустите.ч>
#включить <системный журнал.ч>
#включить <строка.ч>
с помощью пространства имен std;
#определить DAEMON_NAME "vsbecdaemon"
процесс недействительными(){
функция syslog (LOG_NOTICE, "ЦМП коммуникаций Демон запись");
}
тап_п(АГДС, типа char *переменной argv[]) {
//Установить наши маски лесозаготовки и открыть журнал
setlogmask(LOG_UPTO(LOG_NOTICE));
методов openlog(DAEMON_NAME, LOG_CONS | LOG_NDELAY | LOG_PERROR | LOG_PID, LOG_USER);
функция syslog(LOG_INFO, "ввод ЦМП Демон коммуникации");
pid_t пид, Сид;
//Вилка родительского процесса
пид = развилка();
если (пид < 0) { выход(EXIT_FAILURE); }
//Мы получили хороший пид, закрыть родительский процесс
если (пид > 0) { выход(EXIT_SUCCESS); }
//Изменения Файлов По Маске
значение umask(0);
//Создать новый идентификатор подпись для нашего ребенка
Сида = setsid();
если (ИД < 0) { выход(EXIT_FAILURE); }
Каталог //Изменения
//Если мы не можем найти каталог, мы выходим с отказом.
если ((перейти("/")) < 0) { выход(EXIT_FAILURE); }
//Закрыть Стандартные Файловые Дескрипторы
рядом(STDIN_FILENO);
рядом(STDOUT_FILENO);
рядом(STDERR_FILENO);
//----------------
//Основной Процесс
//----------------
в то время как(правда){
процесс(); //запустить процесс
сон(60); //спать в течение 60 секунд
}
//Закрытие журнала
функция closelog ();
}
Мой инит.сценарий д
#! /Бен/ш
### НАЧАЛО ИНИТ ИНФОРМАЦИЯ
# Обеспечивает: sbecd
# Необходима-старт: $удаленной_файловой_системы $syslog в $сетевой $в MySQL
# Необходима-стоп: $удаленной_файловой_системы $syslog в $сети
# По Умолчанию-Старт: 2 3 4 5
# По Умолчанию-Стоп: 0 1 6
# Короткое описание: семя кровать контрольной среды Демон init.сценарий д
# Описание: ЦМП Демон init.д скрипт управления
### КОНЕЦ ИНИЦИАЛИЗАЦИИ ИНФОРМАЦИЯ
Автор#: Гари Рубин HopWorks <myemail>
#
# Не "комплект -е"
# Путь должен только включать /usr/* если оно выполняется после mountnfs.sh сценарий
Путь=/каталоге:/usr на/sbin:/ОГРН:/usr/Бен
Параметр desc="контроллер последовательной связи - кроватью семян экологического контроля"
Имя=sbecd
Демон=выполнить/sbin/$имя
#DAEMON_ARGS="--аргументы функции"
Идентификатора=/ВАР/выполнения/$имя.пид
ИМЯ_СКРИПТА=/и т. д./init.д/$имя
Выход # если пакет не установлен
[ -х "$демона" ] || выход 0
# Прочитать переменную файл конфигурации, если он присутствует
[ -р /и т. д./По умолчанию/$имя ] && . /и т. д./По умолчанию/$имя
# Загружаем подробное задание и другие РВС переменных
. /lib/init/vars.sh
# Определить ЛСБ log_* функции.
# Зависит от ЛСБ-база (>= 3.2-14), чтобы убедиться, что этот файл присутствует
# и status_of_proc работает.
. /Либ/ЛСБ/инит-функции
#
# Функция, которая запускает демон/сервис
#
do_start()
{
# Возвращение
# 0 если демон был запущен
# 1, если демон уже запущен
# 2 если демон не может быть запущена
старт-стоп-демона --пуск --тихий --PID-файл $PID-файл --метод exec $демона --тест > /dev/нуль \
|| возвращает 1
старт-стоп-демона --пуск --тихий --PID-файл $PID-файл --старпома $демона -- \
$DAEMON_ARGS \
|| возвращает 2
# Добавить код здесь, если это необходимо, что ждет процесс, чтобы быть готовым
# для обработки запросов от служб начали, впоследствии зависеть
# на этот раз. В крайнем случае, поспать в течение некоторого времени.
}
#
# Функция, которая останавливает демонов/служб
#
do_stop()
{
# Возвращение
# 0 если демон был остановлен
# 1 если демон был уже остановлен
# 2 если демон не может быть остановлен
# если произошла ошибка
старт-стоп-демона-прекрати-тихо-повтор=термин/30/убить/5 --PID-файл $PID-файл-имя $имя
Код="$?"
[ "$РАТАВАЛІ" = 2 ] && обратный 2
# Ждать для детей, чтобы закончить, если это демон, что Форкс
# и если демон только бежать от этой инициализации.
# Если указанные выше условия не удовлетворены, то добавьте немного другой код
# что ждет процесс, чтобы бросить все ресурсы, которые могли бы быть
# необходима служб начали впоследствии. Последним средством является
# сон в течение некоторого времени.
старт-стоп-демона --остановка --тихий --oknodo --повтор=0/30/убить/5 --метод exec $демона
[ "$?" = 2 ] && Возвращение 2
# Многие демоны не удалять PID-файлы при выходе.
РМ -Ф $PID-файл
возвращение "$РАТАВАЛІ"
}
#
# Функция, которая посылает сигнал SIGHUP демону/услуги
#
do_reload() {
#
# Если демон может перезагрузить его конфигурацию без
# перезапуск (например, когда он посылается сигнал SIGHUP),
# затем реализовать это здесь.
#
старт-стоп-демона --стоп --сигнала 1 --тихий --PID-файл $PID-файл-имя $имя
возвращает 0
}
дело "$1" в
начала)
[ "$Многословен" != нет ] && log_daemon_msg "начиная с $деск" "$имя"
do_start
дело "$?" в
0/1) [ "$многословен" != нет ] && log_end_msg 0 ;;
2) [ "$многословен" != нет ] && log_end_msg 1 ;;
эсок
;;
стоп)
[ "$Многословен" != нет ] && log_daemon_msg "остановка $деск" "$имя"
do_stop
дело "$?" в
0/1) [ "$многословен" != нет ] && log_end_msg 0 ;;
2) [ "$многословен" != нет ] && log_end_msg 1 ;;
эсок
;;
статус)
status_of_proc "$демона" "$имя" && выход 0 || выход $?
;;
#перезагрузка|силы-перезарядка)
#
# Если do_reload() не реализован, то оставьте этот закомментированный
# и оставлять силы-перезагрузка' в качестве псевдонима для "перезагрузки".
#
#log_daemon_msg "перегруз $деск" "$имя"
#do_reload
#log_end_msg $?
#;;
перезагрузка|силы-перезарядка)
#
# Если "перезагрузка" вариант реализуется тогда удалить
псевдоним силу-перезагрузка#''
#
log_daemon_msg "перезапуск $деск" "$имя"
do_stop
дело "$?" в
0/1)
do_start
дело "$?" в
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Старый процесс все еще работает
*) log_end_msg 1 ;; # Не запускается
эсок
;;
*)
# Не удалось остановить
log_end_msg 1
;;
эсок
;;
*)
#Эхо "использование: $ИМЯ_СЦЕНАРИЯ {пуск|стоп|перезапуск|перезагрузка|силы-перезарядка}" >&2
Эхо "использование: $ИМЯ_СЦЕНАРИЯ {пуск|стоп|статуса|рестарт|силы-перезарядка}" >&2
выход 3
;;
эсок
:
Мои процессы (фильтрации) после запуска 'sbecd пуск", а затем "статус sbecd'
~# ПС-а | sbecd грэп
3399 ? 00:00:00 sbecd
3594 ? 00:00:00 sbecd
В Webmin показывает демона, как установить на запуск при загрузке, но это не произойдет, пока я ключ в sbecd и sbecd стоп' не имеет никакого эффекта. Я хотел бы знать, что я делаю неправильно, и почему я вижу поведение, которое я. Я прочитал множество учебников и видел много примеров, в том числе этой Девин Уотсон на http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html и было интересно, если это демона, который влияет на инит.D где это я что-то пропустил или неправильно установлен.