小编And*_*rea的帖子

作为Upstart服务启动时,无法读取UTF-8文件名

我的Java程序以递归方式读取目录的内容.这是一个示例树(请注意非ASCII字符):

./sviluppo
./sviluppo/ciaò
./sviluppo/ciaò/subdir
./sviluppo/pippo
./sviluppo/pippo/prova2.txt <-file
./sviluppo/così
Run Code Online (Sandbox Code Playgroud)

该程序作为Upstart服务启动,其配置文件名为 /init/myservice.conf

description "Private Service"
author "AD"
start on runlevel [2345]
stop on runlevel [! 2345]
exec java -jar /home/mainFind.jar >> /tmp/log.txt
Run Code Online (Sandbox Code Playgroud)

当我启动服务时:

root@mdr:/tmp#  service myservice start
myservice start/running, process 15344
Run Code Online (Sandbox Code Playgroud)

它不会在名称中记录带有非ASCII字符的文件名:

root@mdr:/tmp#  cat /tmp/log.txt
Found dir: /mnt/sviluppo/pippo
Run Code Online (Sandbox Code Playgroud)

相反,当我运行命令时(以root身份,模仿它作为服务启动时会发生什么)它可以正常工作,有和没有exec:

root@mdr:/tmp# java -jar /home/mainFind.jar  >> /tmp/log.txt
root@mdr:/tmp# exec java -jar /home/mainFind.jar  >> /tmp/log.txt

root@mdr:/tmp#  cat /tmp/log.txt
Found dir: /mnt/sviluppo/ciaò
Found dir: /mnt/sviluppo/ciaò/subdir
Found dir: /mnt/sviluppo/pippo
Found dir: /mnt/sviluppo/così
Run Code Online (Sandbox Code Playgroud)

为什么同一个用户运行的同一个程序在Upstart服务中不起作用,但是从命令行运行时是否正确处理了所有文件名?这是Java代码

public static …
Run Code Online (Sandbox Code Playgroud)

java ubuntu service special-characters

15
推荐指数
1
解决办法
2309
查看次数

Iptables:不同接口和端口的转发请求

我有一台带2个接口的机器:

eth0      inet addr:1.1.1.1
eth1      inet addr:2.2.2.2
Run Code Online (Sandbox Code Playgroud)

eth0是服务器,eth1是虚拟机上的网络.

我在服务器上有ssh,所以1.1.1.1:22很忙.

我需要一个规则,将eth0端口6000上的传入连接重定向到端口22(虚拟机ip)上的eth1,ip 2.2.2.100.

在这种模式下,如果我这样做,在外部机器上,

ssh -p 6000 root@1.1.1.1
Run Code Online (Sandbox Code Playgroud)

我会登录虚拟机.

我试过这个规则,但它不起作用:

sudo iptables -P FORWARD ACCEPT
sudo iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 6000 -j DNAT --to 2.2.2.100:22
Run Code Online (Sandbox Code Playgroud)

iptables portforwarding

5
推荐指数
1
解决办法
2万
查看次数