Я не уверен, что использование cron
для запуска скрипта при запуске - это хорошая идея. Альтернативой, которая мне кажется более подходящей, является создание службы SystemD, как описано здесь. Создайте файл с именем /etc/systemd/system/autossh. service
:
[Unit]
Description=Auto Reverse SSH
Requires=systemd-networkd-wait-online.service
After=systemd-networkd-wait-online.service
[Service]
ExecStart=/full/path/to/autossh -CD 8080 -i digitalOcean -R 8081:localhost:22 root@IPofDigitalOceanPC
[Install]
WantedBy=multi-user.target
Затем выполните следующую команду от имени root:
systemctl enable autossh.service
Чтобы проверить, присутствует ли файл file.txt
в каталоге, переданном в качестве первого аргумента скрипту или функции, используйте
[ -e "$1/file.txt" ]
Не забудьте заключить в двойные кавычки замену переменных .
Это успешно, если файл существует, и неудачно, если файл не существует. Ошибка включает случай, когда файл существует, но недоступен, например потому что у вас нет разрешения на просмотр каталога.
Обратите внимание, что в сценариях оболочки и когда дело доходит до статусов завершения процесса, 0 означает успех, а 1 (или больше, до 125) означает сбой. См. Какие значения возврата / выхода я могу использовать в функциях / сценариях bash? и Код выхода по умолчанию при завершении процесса? для получения дополнительных сведений. Поэтому, если вы хотите проверить, существует ли файл, ваш сценарий или функция должны возвращать 0, если файл существует, и 1 в противном случае. Ваш фрагмент делает обратное: он проверяет, не существует ли файл.
if [ -e "$1/file.txt" ]; then
exit 0
else
exit 1
fi
- это просто более сложный способ записи
[ -e "$1/file.txt" ]
exit
( exit
без аргумента статуса использует статус ранее выполненной команды). И если это в конце сценария, то exit
является избыточным.
Если вы действительно хотите проверить, что файл не существует, вы должны инвертировать команду с помощью !
оператор оболочки:
! [ -e "$1/file.txt" ]
или !
test
/ [
оператор:
[ ! -e "$1/file.txt" ]