2017-02-25 4 views
0

私は通常のユーザーとしてスクリプトを手動で実行するとすべてがOKです。しかし、電子メールを受信し、Goスクリプトにパイプすると、ファイルが存在しないためシリアルポートを開くことができません。/dev/ttyACM0 Postfixパイプの間にファイルが存在しません

postfix 1239 1025 0 13:20 ? 00:00:00 pipe -n watchParadox -t unix flags=F user=watch argv=/usr/local/bin/watch -paradox 
watch  1240 1239 0 13:20 ? 00:00:00 /usr/local/bin/watch -paradox 

スクリプトは念のために、グループをダイヤルアウトするために追加された時計のユーザーは、Postfixのユーザーで実行されている、また、ダイヤルアウトです。

drwxr-xr-x 6 root root 380 Feb 25 13:19 . 
dr-xr-xr-x. 18 root root 4096 Feb 22 17:53 .. 
lrwxrwxrwx 1 root root 11 Feb 25 13:19 core -> /proc/kcore 
lrwxrwxrwx 1 root root 13 Feb 25 13:19 fd -> /proc/self/fd 
crw-rw-rw- 1 root root 1, 7 Feb 25 13:19 full 
drwxr-xr-x 2 root root 0 Feb 25 13:19 hugepages 
lrwxrwxrwx 1 root root 28 Feb 25 13:19 log -> /run/systemd/journal/dev-log 
drwxrwxrwt 2 root root 40 Feb 25 13:19 mqueue 
crw-rw-rw- 1 root root 1, 3 Feb 25 13:19 null 
lrwxrwxrwx 1 root root 8 Feb 25 13:19 ptmx -> pts/ptmx 
drwxr-xr-x 2 root root 0 Feb 25 13:19 pts 
crw-rw-rw- 1 root root 1, 8 Feb 25 13:19 random 
drwxrwxrwt 2 root root 40 Feb 25 13:19 shm 
lrwxrwxrwx 1 root root 15 Feb 25 13:19 stderr -> /proc/self/fd/2 
lrwxrwxrwx 1 root root 15 Feb 25 13:19 stdin -> /proc/self/fd/0 
lrwxrwxrwx 1 root root 15 Feb 25 13:19 stdout -> /proc/self/fd/1 
crw-rw-rw- 1 root root 5, 0 Feb 25 13:19 tty 
crw-rw-rw- 1 root root 1, 9 Feb 25 13:19 urandom 

私は、ある次のファイルが存在するが、postfixのパイプが実行されたときに示されていない午前:私のスクリプトで

は、私が本当に存在していたファイルを見つけるためにコマンドを-laのlsを実行しました。

crw-rw---- 1 root dialout 166, 0 25. úno 13.19 ttyACM0 

ファイルでchmod 777を試しましたが、その部門には運がありませんでした。ゴー機能を使用していますhttps://github.com/tarm/serialライブラリを経由してファイルを開く:

ttyACM0と

os.OpenFile("ttyACM0", syscall.O_RDWR|syscall.O_NOCTTY|syscall.O_NONBLOCK, 0666) 

結果:私は相対的な試みたので、そのようなファイルやディレクトリ

なしには問題はパスではありません(使用してchdir)と絶対的に同じ正確な結果を返します。

私はSELinuxを無効にしました。これは私がしたいことではありませんが、解決策を探すには何かを試してみます。

スクリプトの手動実行が適切に行われるため、コードは問題ありません。私はLinuxの設定に何か問題があると思う。

答えて

0

本当にLinuxの問題と私が理解していないその基本的なファブリックのようです。私はFedora25を実行していましたが、問題はDebian8では発生しません。

0

ttyACM0の正しいパスは/ dev/ttyACM0です。あなたが接続するときにファイルモードを設定するためのudevルールを定義します。

プログラムから到達できない場合は、プログラムがchrooted()を実行している可能性があります。

+0

/devディレクトリでchrootされている場合、相対パスで到達可能である必要があるため、パスについてはそうではありません。 でも、chroot(現在のフォルダを/ var/spool/postfixとして表示)と/ dev/ttyACM0への絶対パスを同じ正確な結果で表示しようとしました。しかし、私はそれについて正しいと思う場合、私はそれの内容をリストしている間に/ devフォルダにもっと多くのデバイスを見ることができないはずですか? –

関連する問題