Привет Это не могло бы иметь место, но от первого наблюдения Ваш сценарий жемчуга работает последовательным интерпретируемым способом. В то время как Ваша программа Java работает как скомпилированная программа и делает так сравненным способом. Это может составлять скорость различия в завершении.
В соответствии с Linux, at
всегда предупреждает Вас, что это выполнит указанные команды с /bin/sh
, вместо Вашей любимой оболочки. Вы не можете подавить это сообщение, оно трудно кодируется в исходном коде.
Команда, которую Вы передаете, интерпретируется /bin/sh
. Эта команда может быть путем к сценарию, если Вам нравится; затем /bin/sh
выполнит программу сценария, заставляя интерпретатор сценария быть запущенным и интерпретировать сценарий. Язык сценария абсолютно независим от программы, которая запускает его. Таким образом, если, например, Вы хотите выполнить сценарий удара (т.е. сценарий, который начинается #!/bin/bash
), просто передайте путь к сценарию к at
и проигнорируйте несоответствующее сообщение.
можно достигнуть выполнения его от другой оболочки, изменяющей хижину сценария. Некоторые типичные строки хижины:
#!/bin/sh — Execute the file using sh, the Bourne shell, or a compatible shell #!/bin/csh -f — Execute the file using csh, the C shell, #!/usr/bin/perl -T — Execute using Perl with the option for taint checks #!/usr/bin/php — Execute the file using the PHP command line interpreter #!/usr/bin/python -O — Execute using Python with optimizations to code #!/usr/bin/ruby — Execute using Ruby
Для запущения скрипта в данные времена, я предлагаю Вас добавляющий cronjob
Пример:
Следующая строка делает пользовательскую программу test.pl — якобы сценарий Perl — выполняемой каждые два часа, в полночь, 2:00, 4:00, 6:00, 8:00, и так далее:
0 */2 * * */home/username/test.pl
Один из вариантов — сделать саму команду скриптом, отправляемым в bash (как пример другой оболочки):
команда:
<<'EOD' at now
<<'BASH' /bin/bash -s -- test
echo "$BASH ::" "$@"
BASH
EOD
выход:
warning: commands will be executed using /bin/sh
job 148 at Sat Feb 13 00:24:00 2021
в (1)затем выполнит с помощью /bin/sh
внутреннюю команду:
<<'BASH' /bin/bash -s -- test
echo "$BASH ::" "$@"
BASH
Который выполняет строку echo с переменной $BASH
оболочки bash -и одним позиционным аргументом test с/bin/bash
(в качестве примера для другой оболочки ).
Вот именно.
Чтобы скрыть жестко закодированное сообщение об ошибке -, поставьте перед сложной командой префикс :
.2> >(sed '/warning: commands will be executed using \/bin\/sh/d' )
, так как он удалит предупреждение о выполнении с /bin/sh
, и только это предупреждение, а не другие.
команда:
2> >(sed '/warning: commands will be executed using \/bin\/sh/d' ) \
<<'EOD' at now
<<'BASH' /bin/bash -s -- test
echo "$BASH ::" "$@"
BASH
EOD
выход:
job 150 at Sat Feb 13 00:26:00 2021