Java-программа не может выполнить файл, который она записывает в / tmp, такого файла или каталога нет - PullRequest
0 голосов
/ 29 апреля 2019

У меня проблемы с Java-программой, которая пытается записать файлы в каталог /tmp в Ubuntu 18.10.Он сталкивается с ошибками, поскольку не может записать ожидаемый временный файл.Ошибка 2: нет такого файла или каталога.Права доступа /tmp являются значениями по умолчанию.

Я прочитал, что это не проблема с Windows или Mac OS, потому что она не будет ограничена таким образом.

Как мне решить эту проблему?Должен ли я настроить свою систему по-другому (предпочтительнее) или изменить код?

Редактировать:

Файл, о котором идет речь, фактически создан, разрешения: -rwxrwxr-x 1 lucas lucas 51263 Apr 26 11:12 monalisa13902330713449850714bin*

Однакопрограмма не может его найти:

monalisa.tools.tinv.TInvariantCalculator$InvokeProcessException: java.io.IOException: Cannot run program "/tmp/monalisa13902330713449850714bin" (in directory "/tmp"): error=2, No such file or directory

Каталог /tmp определяется правильно File(System.getProperty("java.io.tmpdir"));

Файл создается здесь:

    toolFile = FileUtils.extractResource("tinv_unix", "monalisa", "bin");
    public static File extractResource(URL resource, String prefix,
            String suffix) throws IOException {
        LOGGER.debug("Extracting resource '" + resource.toString() + "'");
        File file = File.createTempFile(prefix, suffix);
        file.setExecutable(true, false);

Выполнение exec /tmp/[file name] возвращает ту же ошибку.

Редактировать: результат 'strace -e stat, execve -f bash -c / tmp / monalisa1846113800189529428bin´

`

execve("/bin/bash", ["bash", "-c", "/tmp/monalisa1846113800189529428"...], 0x7ffdb3fa2b68 /* 59 vars */) = 0
stat("/home/lucas", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat(".", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/home/lucas", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat(".", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/tmp/bin/bash", 0x7ffdd5b7b7d0)   = -1 ENOENT (No such file or directory)
stat("/usr/local/sbin/bash", 0x7ffdd5b7b7d0) = -1 ENOENT (No such file or directory)
stat("/usr/local/bin/bash", 0x7ffdd5b7b7d0) = -1 ENOENT (No such file or directory)
stat("/usr/sbin/bash", 0x7ffdd5b7b7d0)  = -1 ENOENT (No such file or directory)
stat("/usr/bin/bash", 0x7ffdd5b7b7d0)   = -1 ENOENT (No such file or directory)
stat("/sbin/bash", 0x7ffdd5b7b7d0)      = -1 ENOENT (No such file or directory)
stat("/bin/bash", {st_mode=S_IFREG|0755, st_size=1121696, ...}) = 0
stat("/bin/bash", {st_mode=S_IFREG|0755, st_size=1121696, ...}) = 0
stat("/bin/bash", {st_mode=S_IFREG|0755, st_size=1121696, ...}) = 0
stat("/bin/bash", {st_mode=S_IFREG|0755, st_size=1121696, ...}) = 0
stat("/bin/bash", {st_mode=S_IFREG|0755, st_size=1121696, ...}) = 0
stat("/bin/bash", {st_mode=S_IFREG|0755, st_size=1121696, ...}) = 0
execve("/tmp/monalisa1846113800189529428bin", ["/tmp/monalisa1846113800189529428"...], 0x55d86a4d0960 /* 59 vars */) = -1 ENOENT (No such file or directory)
stat("/tmp/monalisa1846113800189529428bin", {st_mode=S_IFREG|0744, st_size=51263, ...}) = 0
stat("/tmp/monalisa1846113800189529428bin", {st_mode=S_IFREG|0744, st_size=51263, ...}) = 0
stat("/tmp/monalisa1846113800189529428bin", {st_mode=S_IFREG|0744, st_size=51263, ...}) = 0
stat("/tmp/monalisa1846113800189529428bin", {st_mode=S_IFREG|0744, st_size=51263, ...}) = 0
bash: /tmp/monalisa1846113800189529428bin: No such file or directory
+++ exited with 127 +++`

1 Ответ

2 голосов
/ 29 апреля 2019

Могу поспорить, что ваш каталог / tmp смонтирован как noexec - это означает, что вы не можете выполнить там какую-либо программу.

Возможные решения: напишите куда-нибудь еще (возможно, в домашний каталог пользователя) или удалите noexec из / etc / fstab для / tmp и remount - но убедитесь, что вы понимаете, что это означает, прежде чем сделать это.

...