Я создал следующий модульный файл:
[Unit]
Description=Something
[Service]
Type=forking
WorkingDirectory=/tmp
ExecStart=/tmp/script.sh
ExecStop=/tmp/script.sh
Restart=on-failure
Файл script.sh содержит следующее:
#!/bin/sh
echo "Forking"
/tmp/myscript.sh &
Файл myscript.sh содержит следующее:
#!/bin/sh
sleep 60
exit 1
Действительно, каждые 60 секунд systemd перезапускает службу.
Как показано здесь, обратите внимание на разные PID и время запуска, обратите внимание, что он перезапускает родительский элемент:
linux:~ # systemctl status myService.service
● myService.service - Something
Loaded: loaded (/etc/systemd/system/myService.service; static; vendor preset: disabled)
Active: active (running) since Mon 2017-07-10 20:43:29 CEST; 57s ago
Process: 4393 ExecStart=/tmp/script.sh (code=exited, status=0/SUCCESS)
Main PID: 4396 (script.sh)
Tasks: 2 (limit: 512)
CGroup: /system.slice/myService.service
├─4396 /bin/sh /tmp/script.sh
└─4397 sleep 60
Jul 10 20:43:29 linux.suse systemd[1]: Starting Something...
Jul 10 20:43:29 linux.suse script.sh[4393]: Forking
Jul 10 20:43:29 linux.suse systemd[1]: Started Something.
linux:~ # systemctl status myService.service
● myService.service - Something
Loaded: loaded (/etc/systemd/system/myService.service; static; vendor preset: disabled)
Active: active (running) since Mon 2017-07-10 20:44:29 CEST; 1s ago
Process: 4409 ExecStop=/tmp/script.sh (code=exited, status=0/SUCCESS)
Process: 4417 ExecStart=/tmp/script.sh (code=exited, status=0/SUCCESS)
Main PID: 4420 (script.sh)
Tasks: 2 (limit: 512)
CGroup: /system.slice/myService.service
├─4420 /bin/sh /tmp/script.sh
└─4421 sleep 60
Jul 10 20:44:29 linux.suse systemd[1]: Starting Something...
Jul 10 20:44:29 linux.suse script.sh[4417]: Forking
Jul 10 20:44:29 linux.suse systemd[1]: Started Something.
find. -type f -path "./*.a/processed/*" -exec sh -c '
for path; do
prefix=${path%%.a/processed*}
cp "$path" "test/${prefix##*/}_${path##*processed/}"
done
' sh {} +
Опция -type f
ищет обычные файлы по заданному пути, а опция -exec
запускает сценарий оболочки с результатом find
в качестве аргументов({} +
). В циклеfor
-каждый аргумент присваивается переменной path
.
Пример :Если переменная path
равна ./20070214_014700.a/processed/AZ.AS..HHZ
, то
prefix=${path%%.a/processed*}
удаляет суффикс ->./20070214_014700
${prefix##*/}
удаляет префикс к первому/
->20070214_014700
${path##*processed/}
также удаляет префикс и оставляет имя файла ->AZ.AS..HHZ
Результирующее имя целевого файла команды cp
— test/20070214_014700_AZ.AS..HHZ
.