У меня есть скрипт запуска, который иногда выполняется дважды (с интервалом в несколько секунд) после загрузки системы (Ubuntu 16.04.3 LTS). Иногда это выполняется только один раз! Сценарий находится в /etc/init.d/TEST
, и у меня есть символическая ссылка /etc/rc2.d/S99TEST
, которая указывает на сценарий.
Проблема в том, что при загрузке системы сценарий иногда выполняется дважды с паузой в несколько секунд между ними. Как я могу отладить это? Я не вижу упоминания имени скрипта ни в одном из системных журналов (/ var / log / *). Я в растерянности.
Вот скрипт:
#!/bin/bash
### BEGIN INIT INFO
# Provides: test_boot
# Required-Start: $local_fs $network
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: test_boot
# Description: test_boot app
### END INIT INFO
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>>/home/username/TEST.log 2>&1
echo "---"
echo "---"
echo "Starting: $(date)"
sleep 2
echo "User: $(whoami)"
echo "Caller: $(ps -o args= $PPID)"
sleep 2
echo "Done: $(date)"
Вот файл TEST.log после чистой загрузки:
---
---
Starting: Mon Feb 12 21:26:35 UTC 2018
User: root
Caller: /sbin/init tegra_keep_boot_clocks
Done: Mon Feb 12 21:26:39 UTC 2018
---
---
Starting: Mon Feb 12 21:26:59 UTC 2018
User: root
Caller: /sbin/init tegra_keep_boot_clocks
Done: Mon Feb 12 21:27:03 UTC 2018
Спасибо!
Ваш сценарий не проверяет входные данные, например, переданное действие. Посмотрите документацию в /etc/init.d/README
, /etc/init.d/skeleton
и некоторые другие сценарии, такие как /etc/init.d/kmod
, чтобы оценить, какое действие передается сценарию. на выполнение (в $1
) и принять соответствующий ответ на действие.