Есть ли способ изменить начальную оболочку, используемую 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
который
at
работает подsudo <<< 'cd /var/spool/cron/atjobs/ && sed -i -e "1s/\#!\/bin\/sh/\#!\/bin\/bash/" $(ls -1t |head -n1)'
Может быть состояние гонки в случае at now
сам по себе время, если, возможно, дополнительное время (например, 1 секунда) не добавлено искусственно. Хотя в моих случаях использования мне действительно нужно, чтобы он запускался сейчас не через 1 сек.
Как бы то ни было, это слишком серьезный взлом системы, чтобы мои скрипты с комфортом могли использовать его.
Возможно, это не совсем то, что вам нужно, но вы всегда могли бы на работе запустить сценарий оболочки с оболочкой по вашему выбору, не так ли?