Назад | Перейти на главную страницу

изменение оболочки по умолчанию на / bin / bash в планировщике заданий, как в CRON

Есть ли способ изменить начальную оболочку, используемую atd служба планирования работы? Esp. в Ubuntu.

at по умолчанию использует /bin/sh во всех Linux и Solaris, на которых я развернул продукты.

GNU crontab дает вам возможность установить SHELL=/bin/bash по умолчанию для встроенных / не вызывающих сценариев, имеющих собственную строку shebang.

Я знаю, что можно сделать

at teatime <<< 'bash -c "stuff-better-run-on-bash" '

но такие обходные пути создают другие проблемы.

Для CentOS и связанной с ней переменной среды SHELL читается, когда at выдается команда, и она используется в качестве оболочки для выполнения команд или, если она не задана, используется оболочка входа пользователя. Похоже, Ubuntu игнорирует это, хотя предупреждает вас - warning: commands will be executed using /bin/sh. Разве нельзя просто записать свои команды в файл и поставить шебанг вверху?

#!/bin/bash
milk
sugar

затем запустите его как

at teatime -f script

Мне это не нравится, но можно обойтись без немедленного изменения строки 1 нового буферного задания.

master@chopin~/dev Sat Mar 10,20:52:58$ (4800) atq
616 Tue Mar 13 19:17:00 2012 a master
589 Mon Mar 12 16:16:00 2012 a master
617 Tue Mar 13 19:35:00 2012 a master
591 Mon Mar 12 16:23:00 2012 a master
447 Wed Mar 14 09:25:00 2012 a master
586 Mon Mar 12 15:45:00 2012 a master

master@chopin~/dev Sat Mar 10,20:53:01$ (4800) at -c 447
#!/bin/sh
# atrun uid=1000 gid=1000
# mail master 0
umask 22
...

Таким образом, эта стратегия заключалась бы в написании оболочки поверх at который

  1. перехватывает его $ jobid когда at работает под Не нужно
  2. изменяет строку оболочки shebang самого нового файла в / var / spool / cron / atjobs /:

sudo <<< 'cd /var/spool/cron/atjobs/ && sed -i -e "1s/\#!\/bin\/sh/\#!\/bin\/bash/" $(ls -1t |head -n1)'

Может быть состояние гонки в случае at now сам по себе время, если, возможно, дополнительное время (например, 1 секунда) не добавлено искусственно. Хотя в моих случаях использования мне действительно нужно, чтобы он запускался сейчас не через 1 сек.

Как бы то ни было, это слишком серьезный взлом системы, чтобы мои скрипты с комфортом могли использовать его.

Возможно, это не совсем то, что вам нужно, но вы всегда могли бы на работе запустить сценарий оболочки с оболочкой по вашему выбору, не так ли?