Исправление ошибки systemd service 203 / EXEC (нет такого файла или каталога)
я пытаюсь настроить простой таймер systemd для запуска bash-скрипт каждый день в полночь.
systemctl --user status backup.service
сбой и регистрирует следующее:
backup.service: Failed at step EXEC spawning /home/user/.scripts/backup.sh: No such file or directory.
backup.service: Main process exited, code=exited, status=203/EXEC
Failed to start backup.
backup.service: Unit entered failed state.
backup.service: Failed with result 'exit-code'.
я потерялся, так как файлы и каталоги существуют. Сценарий является исполняемым, и, чтобы проверить, я даже установил разрешения на 777.
некоторые справочная информация:
на backup.timer
и backup.service
единичные файлы расположены в /home/user/.config/systemd/user
.
backup.timer
загружен и активен, и в настоящее время ждем полуночи.
вот как это выглядит:
[Unit]
Description=Runs backup at 0000
[Timer]
OnCalendar=daily
Unit=backup.service
[Install]
WantedBy=multi-user.target
здесь backup.service
:
[Unit]
Description=backup
[Service]
Type=oneshot
ExecStart=/home/user/.scripts/backup.sh
[Install]
WantedBy=multi-user.target
и, наконец, это парафраз backup.sh
:
#!/usr/env/bin bash
rsync -a --delete --quiet /home/user/directory/ /mnt/drive/directory-backup/
скрипт работает нормально, если я выполняю его сам.
не уверен, что это имеет значение, но я использую fish
как моя оболочка (началось с .bashrc с).
я рад опубликовать полный сценарий, если это полезно.
2 ответов
кажется, я нашел ответ:
на .service
файл, мне нужно было добавить /bin/bash
перед путем к скрипту.
например, для резервного копирования.обслуживание:
ExecStart=/bin/bash /home/user/.scripts/backup.sh
против:
ExecStart=/home/user/.scripts/backup.sh
Я не уверен, почему. Возможно!--4-->. С другой стороны, у меня есть другой скрипт для моей электронной почты, и файл службы, кажется, работает нормально без /bin/bash
. Он использует default.target
вместо multi-user.target
, хотя.
большинство учебников я наткнулся не добавлять /bin/bash
, но я тогда увидел это так ответ, который имел это, и решил, что стоит попробовать.
файл службы выполняет сценарий, а таймер указан в systemctl --user list-timers
, так что надеюсь, это будет работать.
Update: я могу подтвердить, что все работает сейчас.
когда это случилось со мной, это было потому, что у моего сценария были окончания строки DOS, которые всегда путают линию shebang в верхней части сценария. Я изменил его на конец строки Unix, и это сработало.