Debian и его производные имеют файл skeleton, расположенный в каталоге /etc/init.d, который должен делать именно это, то есть помогать пользователям писать адекватные сценарии. Я использовал его несколько раз, мне кажется, это именно то, что вы ищете.
Как я могу легко создать скрипт /etc/init.d/?
6557
Vi.
Я обычно просто копирую какой-нибудь существующий скрипт /etc/init.d/ssh
, удаляю лишние вещи и редактирую оставшиеся. Это не очень удобно.
Есть ли простой инструмент для создания хороших сценариев Debian?
Ожидая что-то вроде этого:
r@l:~# generate_initscript ololo \ --start-command='daemon --name ololo /usr/bin/ololo' \ --stop-command='daemon --name ololo --stop' > /etc/init.d/ololo r@l:~# cat /etc/init.d/ololo #! /bin/sh ### BEGIN INIT INFO # Provides: ololo # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: # Short-Description: 'ololo' script created by generate_initscript ### END INIT INFO set -e . /lib/lsb/init-functions case "$1" in start) daemon --name ololo /usr/bin/ololo ;; stop) daemon --name ololo --stop ;; *) echo "Usage: /etc/init.d/ololo " exit 1 esac exit 0
Возможно, стоит упомянуть и MetaInit: https://wiki.debian.org/MetaInit или https://packages.debian.org/jessie/metainit.
mivk 9 лет назад
1
2 ответа на вопрос
3
MariusMatutiae
Как создать начальный текст на основе скелета без использования текстового редактора? Например, используя какой-то инструмент, который делает редактирование на основе параметров командной строки?
Vi. 10 лет назад
0
Бонусные баллы, если такой инструмент также переносим между различными системами инициализации.
Vi. 10 лет назад
0
Сценарии без текстового редактора были бы адской хитростью. Возможно, вы заметили, что вас зовут "VI"? Давай.
Fopedush 10 лет назад
6
https://unix.stackexchange.com/a/480897/5132 `/ etc / init.d / skeleton` больше нет.
JdeBP 6 лет назад
0
0
Vi.
I have found this gist: https://gist.github.com/naholyr/4275302
This is basically what was I was searching for.
Here is my (modified) version of the script:
#!/bin/bash SERVICE_FILE=$(tempfile) cat >> $SERVICE_FILE <<\EOF #!/bin/sh ### BEGIN INIT INFO # Provides: <NAME> # Required-Start: $local_fs $network $named $time $syslog # Required-Stop: $local_fs $network $named $time $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Description: <DESCRIPTION> ### END INIT INFO SCRIPT=<COMMAND> RUNAS=<USERNAME> PIDFILE=/var/run/<NAME>.pid LOGFILE=/var/log/<NAME>.log start() { if [ -f "$PIDFILE" ] && kill -0 $(cat "$PIDFILE"); then echo 'Service already running' >&2 return 1 fi echo 'Starting service…' >&2 local CMD="$SCRIPT &> \"$LOGFILE\" & echo \$!" su -c "$CMD" $RUNAS > "$PIDFILE" echo 'Service started' >&2 } stop() { if [ ! -f "$PIDFILE" ] || ! kill -0 $(cat "$PIDFILE"); then echo 'Service not running' >&2 return 1 fi echo 'Stopping service…' >&2 kill -15 $(cat "$PIDFILE") && rm -f "$PIDFILE" echo 'Service stopped' >&2 } uninstall() { echo -n "Are you really sure you want to uninstall this service? That cannot be undone. [yes|No] " local SURE read SURE if [ "$SURE" = "yes" ]; then stop rm -f "$PIDFILE" echo "Notice: log file is not be removed: '$LOGFILE'" >&2 update-rc.d -f <NAME> remove rm -fv "$0" fi } case "$1" in start) start ;; stop) stop ;; uninstall) uninstall ;; restart) stop start ;; *) echo "Usage: $0 " esac EOF echo "--- Customize ---" echo "I'll now ask you some information to customize script" echo "Press Ctrl+C anytime to abort." echo "Empty values are not accepted." echo "" prompt_token() { local VAL="" while [ "$VAL" = "" ]; do echo -n "$ : " read VAL if [ "$VAL" = "" ]; then echo "Please provide a value" fi done VAL=$(printf '%q' "$VAL") eval $1=$VAL sed -i "s!<$1>!$(printf '%q' "$VAL")!g" $SERVICE_FILE } prompt_token 'NAME' 'Service name' if [ -f "/etc/init.d/$NAME" ]; then echo "Error: service '$NAME' already exists" exit 1 fi prompt_token 'DESCRIPTION' ' Description' prompt_token 'COMMAND' ' Command' prompt_token 'USERNAME' ' User' if ! id -u "$USERNAME" &> /dev/null; then echo "Error: user '$USERNAME' not found" exit 1 fi echo "" echo "--- Installation ---" if [ ! -w /etc/init.d ]; then echo "You don't gave me enough permissions to install service myself." echo "That's smart, always be really cautious with third-party shell scripts!" echo "You should now type those commands as superuser to install and run your service:" echo "" echo " mv \"$SERVICE_FILE\" \"/etc/init.d/$NAME\"" echo " touch \"/var/log/$NAME.log\" && chown \"$USERNAME\" \"/var/log/$NAME.log\"" echo " update-rc.d \"$NAME\" defaults" echo " service \"$NAME\" start" else echo "1. mv \"$SERVICE_FILE\" \"/etc/init.d/$NAME\"" mv -v "$SERVICE_FILE" "/etc/init.d/$NAME" echo "1b. chmod +x" chmod 755 "/etc/init.d/$NAME" echo "2. touch \"/var/log/$NAME.log\" && chown \"$USERNAME\" \"/var/log/$NAME.log\"" touch "/var/log/$NAME.log" && chown "$USERNAME" "/var/log/$NAME.log" echo "3. update-rc.d \"$NAME\" defaults" update-rc.d "$NAME" defaults echo "4. service \"$NAME\" start" service "$NAME" start fi echo "" echo "---Uninstall instructions ---" echo "The service can uninstall itself:" echo " service \"$NAME\" uninstall" echo "It will simply run update-rc.d -f \"$NAME\" remove && rm -f \"/etc/init.d/$NAME\"" echo "" echo "--- Terminated ---"
Похожие вопросы
-
9
В чем разница между командами "su -s" и "sudo -s"?
-
4
Требуется хороший бесплатный образ Ubuntu Server VMWare
-
4
Каковы различия между основными дистрибутивами Linux? Я замечу?
-
-
2
Ограничить использование процессора для Flash в Firefox?
-
2
Как мне заставить мой микрофон работать под Debian GNOME?
-
2
Конки установки - образцы / идеи?
-
3
Каковы различия между оконными менеджерами Linux?
-
2
ThunderBird / Синхронизация освещения с SE k770i
-
4
Файловая система Linux
-
6
Полноэкранная медленная вспышка в KDE 4