有很多文章解释了这个问题:现代POSIX系统不再允许解释shell脚本,但我发现没有一个解释一步一步解释推荐的ubuntu Linux方式,从2014年开始,创建一个在启动时运行的特权PERL脚本。这不是用于共享脚本或将其分发给其他人。它只是我自己在1用户ubuntu桌面系统上的使用。它应该很简单。
那么,应该如何我现在在ubuntu 14.10上这样做了?建议的方式是什么?
我的perl脚本必须在启动过程结束时启动,为root,在perl中执行比在C中更容易的事情,将rsync文件放到备份驱动器中,然后睡一分钟,然后执行它再次。另外,我希望能够从命令行测试我的脚本以查看它是否正常工作。这是一个简单的版本:
#!/usr/bin/perl -wT
use strict;
use warnings FATAL => qw{ uninitialized };
use POSIX;
$ENV{"PATH"} = "/usr/bin";
$ENV{"BASH_ENV"} = "";
print "you are euid =".geteuid()." = $> = ".`whoami`;
## do a lot of stuff in an endless loop with sleep
这可以正常运行 sudo testeuid.pl ,但如果我chmod这个
-rwsrwsr-x 1 root 196 Sep 13 11:50 testeuid.pl*
然后尝试以普通用户身份运行它,它没有(它没有获得权限)。但是我认为一旦我做了-T(虽然不是普通的shell脚本),这应该适用于perl。 suidperl已被弃用。
再次,这里的任务很简单:
我曾希望提出
$ daemon /usr/local/bin/testeuid.pl &
$ exit 0
进入rc.local,chmod rc.local是可执行的,并且完成了。不行。它没有用。我认为这是setuid问题,而不是我做错了。 (很难测试......我不想重新启动。)rc.local执行的uid权限是什么?
或者,我是否需要或应该写一项服务(更多工作!)?但是,然后,使用systemd和upstart,这是如何正确完成的(仅限我自己)?很难跟上这一点。我只想要一些能在ubuntu上使用几年的东西。我不在乎如何。
一些帖子告诉我写一个C包装脚本来逃避意图。这是意图吗?
其他一些帖子说我应该探索/ etc / sudoer修改。
现在在我自己的个人ubuntu Linux上启动时运行我自己的特权PERL脚本的推荐简单方法是什么?