Я пытаюсь настроить простой таймер 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).
Я буду рад опубликовать полный сценарий, если он будет вам полезен.
ls -l /home/user/.scripts/backup.sh
? Начало вашего сценария backup.sh выглядит очень странно:#!/user/env/bin bash
, действительно ли существует исполняемый файл/user/env/bin
? Вы уверены, что не имели в виду/usr/bin/env
или/home/user/bin/env
? - person nos   schedule 20.08.2017ls
выходы-rwxrwxrwx 1 dwrz dwrz 1470 Aug 11 01:57 /home/user/.scripts/backup.sh
. И мои извинения - опечатка в shebang была, когда я копировал вещи сюда. Это/usr/
в сценарии. - person dwrz   schedule 20.08.2017.bashrc
- действительно плохая идея. Обновите запись/etc/passwd
, чтобы напрямую указать fish, не путайте программы, которые могут намеренно запускать интерактивный экземпляр bash, заставляя его запускать другую несовместимую оболочку. - person Charles Duffy   schedule 20.08.2017PATH
при вызове вашей службы? Еслиenv bash
не может найтиbash
из-за отсутствияPATH
, это вызовет вашу ошибку. УстановкаEnvironment=PATH=/bin:/usr/bin
или другого заведомо исправного значения в.service
не повредит. - person Charles Duffy   schedule 20.08.2017fish
в/etc/passwd
, как не рекомендует Arch Wiki, но Я ценю поднятую голову и тоже займусь этим. На данный момент я попробовал две вещи: (1) указатьPATH
в служебном файле, (2) просто использовать#!/bin/bash
в сценарии (который все еще работает нормально, когда я сам выполняю его). Я все еще получаю ту же ошибку с systemd (обязательноdaemon-reload
). Я сейчас посмотрю наsysdig
. - person dwrz   schedule 20.08.2017