Linux crontab - какую оболочку я использую

-liner ниже:

# yum history list|awk '$1 ~ /[0-9]+/ {print $1}'| while read a; do yum history undo -y $a; done

Будьте осторожны при выполнении этой команды, потому что она удалит все установленные вами пакеты! Если вам нужно подтверждение, вы можете удалить флаг -y.

1
14.03.2017, 16:16
2 ответа

Это зависит от того, какая версия cron , который у вас есть, и его настройки, но обычно это / bin / sh . Часто это символическая ссылка на что-то еще, но ее легко найти, поскольку вы можете просто запустить ls -l / bin / sh .

Вы можете добавить запись cron, например:

* *    * * *    ps -p $$ > /tmp/shelltest

или (при редактировании / etc / crontab , вместо добавления записи в crontab для каждого пользователя, как это делается с помощью crontab -e ]):

* *    * * *    username    ps -p $$ > /tmp/shelltest

который сообщит вам через вывод в / tmp / shelltest имя файла оболочки. Если ваш cron правильно настроен для отправки вам почты, вы можете пропустить > / tmp / shelltest , чтобы получить информацию по почте, а не помещать ее в файл.

Чтобы быть немного более триксификационным, что-нибудь вроде:

* *    * * *    ls -l /proc/`ps -p $$ | tail -n 1 | xargs | cut -f 1 -d \ `/exe > /tmp/shelltest

должно указать вам точный используемый файл.В типичной системе Debian это будет выглядеть примерно так:

lrwxrwxrwx 1 dspillett dspillett 0 Mar 14 16:17 /proc/1356/exe -> /bin/dash

показывает, что cron в этом случае использует тире в качестве оболочки по умолчанию.

Чтобы разбить эту команду:

  • ps -p $$ выводит подробную информацию о текущем процессе (ну, ps родительский процесс), который в данном случае будет оболочкой.
  • tail -n 1 удаляет строку заголовка, которая ps включает
  • конвейер через xargs - это трюк для удаления начальных пробелов в строке
  • вызов cut берет первое поле из подобного, где разделителем является пробел (абсолютно жизненно важно, чтобы вы включили пробел между \ и обратным апострофом)
  • перенос этого в обратные кавычки включает вывод (который должен быть идентификатором процесса) во внешней командной строке, которая становится ...
  • ls -l / proc / 9999 / exe , где «9999» - это идентификатор процесса, считанный из ps , в котором перечислены файл, используемый для создания процесса, потому что в файловой системе '/ proc' / proc / / exe есть ссылка на исполняемый файл процесса, идентифицированного .
  • (может быть более лаконичный способ сделать то же самое, набранный по памяти, предложения приветствуются в комментариях!)
2
27.01.2020, 23:11

Из crontab(5):

Некоторые переменные среды настраиваются автоматически с помощью cron(8) демон. SHELL устанавливается в /bin/sh, а LOGNAME и HOME устанавливаются из строка /etc/passwd владельца crontab. ДОМ и ОБОЛОЧКА могут быть переопределяется настройками в crontab; LOGNAME не может.

9
27.01.2020, 23:11

Теги

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