NullPointerException
s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException
. Они наиболее распространены, но другие способы перечислены на странице NullPointerException
javadoc.
Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException
, be:
public class Example {
public static void main(String[] args) {
Object obj = null;
obj.hashCode();
}
}
В первой строке внутри main
я явно устанавливаю ссылку Object
obj
равной null
. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException
, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.
(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
Вероятно, вам нужно сообщить cron, что оболочка для использования - оболочка bash, по умолчанию она соответствует sh. Вы можете сделать это для всех записей crontab, поместив эту строку в свой crontab:
SHELL=/bin/bash
Обратите внимание, что это приведет к запуску всех скриптов в crontab под bash, которые могут быть не такими, какие вы хотите. Если вы хотите изменить линию crontab, чтобы просто запустить bash, измените ее на это:
* * * * 1-5 root /bin/bash /home/xxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/jmeter-cron-randomise.sh >> /home/xxxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/cron.log 2>&1
Обратите внимание, что я также вызвал запись stderr в файл cron.log (2> & amp; 1), который может быть не таким, каким вы хотите, но довольно распространенной практикой. Это может помочь вам дополнительно диагностировать ошибки из сценария.
В случае, если это кому-то поможет: для меня это было связано с тем, что я закончил с окончанием строки «DOS» (CR-LF) вместо окончаний строк «unix» (LF). Это можно проверить с помощью od или вашего любимого инструмента шестнадцатеричного дампа, например:
od -c <script_file>
... и искать\r\n вместо просто\n.
Кажется (и эта статья поддерживает его), что символ CR останавливает работу «shebang», потому что интерпретируется как часть имени исполняемого файла оболочки.
(Окончания строк появились, потому что файл поступал из репозитория git и был передан через машину Windows).
/bin/bash
, или это может быть/usr/bin/bash
или что угодно. Интересно отметить, что реальный полный путь можно получить с помощьюwhich bash
. – fedorqui 23 October 2014 в 16:42