Как получить SFTP на Ubuntu, работающей снова? Я должен попытаться зафиксировать его или переустановить?

Работа CRON может быть запущена как root или другой указанный пользователь. Если этот пользователь не имеет разрешения на запись в .sql файл, задание потерпит неудачу.

Если файл существует, и он имеет разрешение на запись для пользователя, выполняющего задание, файл будет записан.

Если файл не существует, и пользователь не имеет разрешения на создание файлов в целевом каталоге, задание потерпит неудачу.

Как правило, я могу сказать

sudo touch /var/log/foo.log
sudo chown my_username /var/log/foo.log

Теперь я могу сказать:

echo bar > /var/log/foo.log

, но если файл не существует, он не пройдет, так как у меня нет разрешения на создание файлов в / var / log / .

Поэтому вопрос становится, если пользователь работает на задании, имеет право создавать файлы, где когда-либо вывод из MySQLDUMP .


Теперь, если я настрою работу CRON, чтобы запустить скрипт с этим:

date > /var/log/foo.log

Каждую минуту, я могу добавить:

*  *    * * *   my-user-name  /path/to/script

на / etc / crontab . Поскольку у меня нет разрешения на создание файлов в / var / log / Cron Daemon отправит мне электронное письмо, когда работа завершится неудачно.

Через 1 минуту нет файла. Я иду к терминалу и типу Mail :

$ mail
>N  1 Cron Daemon        Sat Jan 31 05:15   19/731   Cron     /path/to/script
? type
...

/path/to/script: line 3: /var/log/foo.log: Permission denied

ОК. Виноват. Я создаю файл и породил его мне. Теперь все в порядке.


Посмотрите на них также:

0
21.08.2018, 05:01
1 ответ

меньше будет использовать UTF-8 в большинстве современных систем. От человек меньше :

 Если ни LESSCHARSET, ни LESSCHARDEF не набора, но любой из последовательностей
«UTF-8,» «UTF8,» «utf-8» или «utf8» находится в LC_ALL, LC_CTYPE или
переменные среды LANG, то набор символов по умолчанию - utf-8.

Если эта последовательность не найдена, но система поддерживает setlocale
, меньше будет использовать setlocale для определения набора символов.
setlocale управляется настройкой среды LANG или LC_CTYPE
переменные.

Наконец, если интерфейс setlocale также недоступен, по умолчанию
набор символов latin1.

Чтобы убедиться в том, что меньше работает этот путь создайте файл со следующим содержимым:

usesunâà

Распечатайте его с меньше . Если все символы отображаются правильно, это означает, что LANG содержит UTF-8. Просмотрите его с помощью команды locale или напечатайте переменную $ LANG . Теперь измените языковой стандарт на что-то без UTF-8 имени, для Пример:

$ export LANG=en_US

Повторите печать этого файла. Символы Юникода не должны быть напечатаны правильно.

Я также использую Emacs и помню некоторые ситуации, когда он не мог отобразить файлы правильно, но меньше мог.

-121--153525-

Сначала из документации bash :

-c последовательностью

Чтение и выполнение команд из последовательности после обработки опций, затем выйдите. Любые оставшиеся аргументы назначаются позиционному параметры, начиная с $0.

Поэтому при вводе параметра -c bash обрабатывает строку после -c как последовательность команд, а затем выполняет эти команды в дочерней среде процесса. Поэтому при вызове bash -c file , bash обрабатывайте файл как команду, найдите его, просмотрев переменную среды PATH . Если файл найден, выполните его, в противном случае возникнет команда not found error.

При вызове bash file просто обрабатывайте file как скрипт оболочки , считывайте и выполняйте команды из file , затем выходите. Опять же, из bash documentation :

Если аргументы остаются после обработки опции, и ни -c, ни параметр -s предоставлен, первый аргумент предполагается имя файла, содержащего команды оболочки (см. Сценарии оболочки). Когда Bash вызывается таким образом, $0 устанавливается на имя файла, и позиционные параметры устанавливаются в оставшиеся аргументы. Удар читает и выполняет команды из этого файла, а затем выходит из него. Выход Баша status - это состояние выхода последней команды, выполненной в сценарии. Если команды не выполняются, состояние выхода равно 0.

Итак, ваше понимание верно.

-121--75014-

Если какой-либо текст выводится на консоль, происходит сбой SFTP. Я добавил эхо к своему ~/.bashrc ,который убил его.

Я добавил следующее в самый верх .bashrc :

:<<COMMENT
  SFTP breaks if any thing is output to the shell, and it doesn't need
  anything in .bashrc anyway.

  Description of the following line of code: "If file descriptor 0, or 
  'the input' is connected to a terminal, which is true when you do: 
     ssh yourhost 
  but not when you do:
     ssh yourhost bash -s < script # here it's connected to 'script', a file"

  See
  - https://serverfault.com/questions/485487/use-bashrc-without-breaking-sftp
  - http://www.openssh.com/faq.html#2.9
COMMENT
[ -t 0 ] || return

Кроме того, я перенес эхо, которое я намеревался как вводное сообщение для входа, на /etc/motd , как описано в этом ответе


Благодаря dualbus и isikawa на # bash.

1
28.01.2020, 02:51

Теги

Похожие вопросы