В моей новой системе Ubuntu я пытался запуститься, сценарий Bash автоматически в системе запускают.
Я нашел много сообщений и практическое руководство об этом. таким образом, я пытался сделать его через Crontab:
crontab -e
@reboot /cronjobs/demo.sh >> /cronjobs/cronLogs/demo.output
sudo chmod +x /cronjobs/demo.sh
Вывод был создан, но сценарий не выполнится. Таким образом, я попробовал другое решение rc.local
файл:
sudo vi /etc/rc.local
/cronjobs/demo.sh || exit 1
Но мой сценарий не работает. Таким образом, я считал, что для перезагрузки сценарий должен быть в /etc/rc0.d/
. Таким образом, я попробовал это:
mv /cronjobs/demo.sh /etc/rc0.d/K99_demo.sh
То же самое - сценарий не будет выполняться.
Так, какова моя ошибка? Почему мой сценарий не может быть выполнен? Я могу выполнить свой сценарий, если я работаю ./demo.sh
после того, как я переключился на папку с cd /cronjobs
. Сценарий является демонстрационным файлом, который просто создает папку:
#!/bin/sh echo demo output mkdir /cronjobs/demofolder
Отредактированный: Замененные пути и имена файлов; добавленное полное содержание demo.sh
файл
Самое легкое решение использует sudo полномочия, создают файл как это в /etc/cron.d/
:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot root mkdir /cronjobs
@reboot root sleep 10
@reboot root mkdir /cronjobs/demofolder
Это избегает использования файла сценария в целом и работает на всех пользователей независимо от их названия корневого каталога, т.е./home/steve,/home/mary, и т.д.
sleep 10
По любой причине, крон работает слишком быстро, или ядро работает слишком медленное при создании каталогов. Дополнительная строка sleep 10
была необходима между два mkdir
строки.
Вам, возможно, не понадобятся 10 секунд, промежуточных, эти два делают команды каталога, но 10 работ над моей системой с SSD.
Согласно комментариям ниже более простого метода, должен использовать:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot root mkdir -p -v /cronjobs/demofolder
-p
(долгая версия --parents
) говорит mkdir
автоматически создавать все родительские уровни каталога, если они не существуют. -v
(долгая версия --verbose
) говорит mkdir
печатать названия всех созданных каталогов.