Я уже пробовал половину аскубунту, но все еще не получилось. Я получил следующий скрипт оболочки:
#!/bin/bash
echo "test" > "/mnt/ssd/test.txt"
echo "test"
И следующую строку crontab -e:
* * * * * /mnt/ssd/test.sh > /mnt/ssd/cron.log
Когда я добавлю строку в файл cron.log вручную, она будет пустой каждую новую минуту, что говорит мне, что cron увольняют.
Я также попробовал следующий cronjob:
* * * * * env > /mnt/ssd/env.output
Это дало мне следующие значения:
LANGUAGE=nl_NL.UTF-8
HOME=/home/pi
LOGNAME=pi
PATH=/usr/bin:/bin
LANG=nl_NL.UTF-8
SHELL=/bin/sh
LC_ALL=nl_NL.UTF-8
PWD=/home/pi
Это снова говорит мне, что cron работает, и SHELL верна да?
Я тоже пробовал этот cron:
* * * * * PATH=/bin:/sbin:/usr/bin:/usr/sbin /mnt/ssd/test.sh > /mnt/ssd/cron.log
Ни он ничего не записывает в файл cron.log, ни создает файл test.txt.
Я немного растерялся. Если мой PATH неверен, я пытаюсь исправить это правильным образом или что-то еще неправильно?
РЕДАКТИРОВАТЬ: благодаря @steeldrive было обнаружено, что диск, на котором был расположен этот скрипт, был смонтирован с типом noexec. Значение bash-файла обычно не может быть выполнено. Помещение «bash» перед командой заставило ее работать. Команда теперь выглядит следующим образом:
* * * * * bash /mnt/ssd/test.sh > /mnt/ssd/cron.log 2>&1
добавлены 2> & 1, поэтому ошибки также будут выводиться в файл журнала.
Хорошо так, на основе входа, данного @steeldriver, нам удалось получить решение.
Сценарий удара расположен на монтировании, которое было смонтировано типом noexec. Значение файлов удара не может быть выполнено простое. Это было найдено с помощью команды:
mount | grep ssd
Решение однако просто: добавьте удар перед crontab-e команда:
* * * * * bash /mnt/ssd/test.sh > /mnt/ssd/cron.log 2>&1
2> &1 часть добавляется в этой строке также, таким образом, журналы ошибок также помещаются в файле cron.log.