Работа 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
ОК. Виноват. Я создаю файл и породил его мне. Теперь все в порядке.
Посмотрите на них также:
меньше
будет использовать 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 и помню некоторые ситуации, когда он не мог отобразить файлы правильно, но меньше
мог.
Сначала из документации 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.