卡桑德拉tmpdir改变位置

如果/tmp被设置为noexec ,Cassandra无法启动,这几乎是默认的:

 java.lang.NoClassDefFoundError: Could not initialize class com.sun.jna.Native at org.apache.cassandra.utils.memory.MemoryUtil.allocate(MemoryUtil.java:82) ~[apache-cassandra-2.2.2.jar:2.2.2] at org.apache.cassandra.io.util.Memory.<init>(Memory.java:74) ~[apache-cassandra-2.2.2.jar:2.2.2] at org.apache.cassandra.io.util.Memory.allocate(Memory.java:97) ~[apache-cassandra-2.2.2.jar:2.2.2] at org.apache.cassandra.io.sstable.IndexSummary$IndexSummarySerializer.deserialize(IndexSummary.java:323) ~[apache-cassandra-2.2.2.jar:2.2.2] at org.apache.cassandra.io.sstable.format.SSTableReader.loadSummary(SSTableReader.java:836) ~[apache-cassandra-2.2.2.jar:2.2.2] at org.apache.cassandra.io.sstable.format.SSTableReader.load(SSTableReader.java:692) ~[apache-cassandra-2.2.2.jar:2.2.2] at org.apache.cassandra.io.sstable.format.SSTableReader.load(SSTableReader.java:664) ~[apache-cassandra-2.2.2.jar:2.2.2] at org.apache.cassandra.io.sstable.format.SSTableReader.open(SSTableReader.java:458) ~[apache-cassandra-2.2.2.jar:2.2.2] at org.apache.cassandra.io.sstable.format.SSTableReader.open(SSTableReader.java:363) ~[apache-cassandra-2.2.2.jar:2.2.2] at org.apache.cassandra.io.sstable.format.SSTableReader$4.run(SSTableReader.java:501) ~[apache-cassandra-2.2.2.jar:2.2.2] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_102] at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_102] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_102] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_102] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_102] 

如果我从/var/tmp mount中删除noexec标志, Cassandra启动正常。 我已经尝试了很多方法来改变cassandra-env.sh文件中tmpdir的位置:

 JVM_OPTS="$JVM_OPTS -Djna.tmpdir=/home/cassandra/tmp" JVM_OPTS="$JVM_OPTS -Djava.io.tmpdir=/home/cassandra/tmp" JVM_OPTS="$JVM_OPTS -Dorg.xerial.snappy.tempdir=/home/cassandra/tmp" 

我没有立即使用这些,当然,这些都是我在互联网上find的解决scheme,但似乎没有任何工作。 我甚至尝试在cassandra-env.sh文件的开始处导出TMPDIR ,但无济于事。 它总是以相同的信息失败。

我认为离开/tmp没有noexec标志是一个坏主意,安全明智。 我显然在这里缺less一些基本的东西。 如何将tmpdir设置为/home/cassandra/tmp或类似的东西?

啊,看起来这两个选项必须在cassandra-env.sh文件中:

 JVM_OPTS="$JVM_OPTS -Djna.tmpdir=/home/cassandra/tmp" JVM_OPTS="$JVM_OPTS -Djava.io.tmpdir=/home/cassandra/tmp"