LINUX.ORG.RU

Автозапуск скрипта systemd

 ,


1

1

Всем привет. Пытаюсь добавить простой скрипт в автозагрузку через systemd. При себе Ubuntu 18.04

Содержимое скрипта:

cat /etc/systemd/system/autoloadsh.service

[Unit]
Description=Autoload shell script
After=network.target

[Service]
Type=oneshot
User=root
ExecStart='/home/ftp/autoload.sh'

[Install]
WantedBy=multi-user.target

Запуск:

autoload.sh[1226]: /home/ftp/autoload.sh: 4: /home/ftp/autoload.sh: Bad substitution
autoload.sh[1226]: find: paths must precede expression: `{}'

Сам скрипт.

#!/bin/sh
#put this file to ftp home dir

FTP_HOMEDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
# FTP_HOMEDIR="/home/ftp"

EXEFILES=".mount-bind*.save"
find $FTP_HOMEDIR -maxdepth 1 -type f -name $EXEFILE -exec {} \;

Вывод с анализатора по четвертой строке: https://github.com/koalaman/shellcheck/wiki/SC2039

Что ему от меня нужно?

★★

Последнее исправление: BitSum (всего исправлений: 3)

timer ему нужен

anonymous
()
#!/usr/bin/env bash
#put this file to ftp home dir

FTP_HOMEDIR="$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)"
# FTP_HOMEDIR="/home/ftp"

EXEFILES=".mount-bind*.save"
find "$FTP_HOMEDIR" -maxdepth 1 -type f -name "$EXEFILE" -exec "{}" \;
anonymous
()
Ответ на: комментарий от BitSum

не обращай на анона внимание, у тебя в имени переменной ошибка, EXEFILE vs EXEFILES

eternal_sorrow ★★★★★
()
Ответ на: комментарий от eternal_sorrow

А я думал это файлы для бекапа.

anonymous
()
#!/usr/bin/env bash

# если файлов вида ".mount-bind*.save" нет, for выполнится 0 раз
shopt -s nullglob

cd "${0%/*}" && \
  for i in .mount-bind*.save; do [[ -x "$i" ]] && "$i"; done
spirit ★★★★★
()
Последнее исправление: spirit (всего исправлений: 1)
Ответ на: комментарий от BitSum

Это вежливый способ указать на то, что нужно искать оболочку bash для исполнения. Способ универсальный, т.к. даже если bash нет в /bin или /usr/bin, по env, а точнее PATH, можно будет узнать где он и запустить.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.