Моя структура каталогов выглядит следующим образом:
.
├── src/main/java
│ └── my code
├── scripts/install
│ ├── preinst.sh
│ └── postinst.sh
├── scripts/systemd
│ ├── my-app.service
│ └── my-app.timer
├── build.gradle.kts
└── settings.gradle.kts
Мое приложение работает как служба с интервалом, определенным в /etc/systemd/system/my-app.timer
.
Я упаковываю свое приложение в пакет Debian дляустановить и хотел бы:
- Остановить таймер перед установкой нового пакета.
- Установить новый пакет.
- Запустить таймер после установки нового пакета.
postinst.sh
прекрасно работает и выполняется каждый раз, однако сценарий preinst.sh
, кажется, никогда не выполняется.
preinst.sh
#!/bin/bash
echo "Stopping my-app.timer"
systemctl stop my-app.timer
postinst.sh
#!/bin/bash
echo "Starting my-app.timer"
systemctl start my-app.timer
build.gradle.kts
tasks.buildDeb {
val deployDir = "/opt/my-app"
val confDir = "/etc/$deployDir"
val config = if (project.properties["config"] == null) "dev" else project.properties["config"]
val systemdDir = "/etc/systemd/system"
packageName = project.name
version = project.version.toString().replace("-SNAPSHOT", "")
user = "root"
group = "root"
// copy to lib
from("$buildDir/libs") {
into(deployDir)
}
// copy to conf
from("$projectDir/conf") {
when (config) {
"dev" -> include("*-dev.properties")
"test" -> include("*-test.properties")
"prod" -> include("*-prod.properties")
}
into(confDir)
}
from("$projectDir/src/test/resources") {
into(confDir)
}
from("$projectDir/scripts/systemd") {
into(systemdDir)
}
preInstall(File("$projectDir/scripts/install/preinst.sh"))
postInstall(File("$projectDir/scripts/install/postinst.sh"))
}
Как я могу гарантировать, чтоmy-app.timer
остановлен перед установкой нового пакета?