我试图在用户登录时运行我的应用程序。所以我添加了一个脚本,~/.bash_profile
如下所示:
# for Buluttdepo
/usr/bin/myapp > /dev/null 2>&1 &
export MYAPP_HOME=/opt/myapp
运行成功了,但是我应该添加脚本吗.bash_profile
?
否则我可以添加/etc/profile
或添加脚本文件为/etc/profile.d/myapp_run.sh
.如果我这样做,myapp 将由 root 运行。但我不想以 root 身份运行它。我应该由任何用户运行。
因此,我正在构建一个 RPM 包。我想在 RPM 软件包安装程序运行时添加脚本。因为RPM包是root安装的,所以不知道.bash_profile
该添加到哪个,所以只能添加到/etc/profile
或/etc/profile.d/
。
- 我应该将其添加到哪个文件?
- 如果文件是,如何在for
~/bash_profile
中添加脚本bash_profile
任何用户通过?root
rpm
- 如果文件是
/etc/profile
,任何用户如何可以运行myapp
? - 你能建议一个更简单的方法吗?
- 如果文件是,如何在for
答案1
听起来cron
可以解决您想要做的事情。
crontab 的一般格式看起来像这样,每列分别代表分钟、小时、月份中的某一天、月份和星期几。
30 * * * * /home/user/updates.sh
Cron 还支持一些预定义条目,例如@weekly
、@daily
其中包括@reboot
。
您可以crontab
在以想要运行脚本的用户身份登录后进行编辑crontab -e
,也可以以 rootcrontab -u username -e
身份编辑其他用户的crontab
。
打开编辑器后,添加:
@reboot /usr/bin/myapp > /dev/null 2>&1
下次重新启动机器时,/usr/bin/myapp
将由您将其放入其 crontab 的用户运行。
答案2
软件包安装脚本接触主目录中的文件是绝对不允许的。您很可能会破坏用户的配置,并且它可能会也可能不会起作用(如果用户使用 zsh 或 tcsh 作为他的登录 shell 会怎样?),并且它仅适用于包发布时其主目录在附近的用户。安装。
每当用户登录时就运行应用程序是极其奇怪的。由每个用户选择是否要运行你的应用程序。
如果您需要在用户登录时执行代码,那么修改/etc/profile
是最好的选择。如果您的发行版有一个目录/etc/profile.d
,请将文件拖放到那里而不是修改/etc/profile
。如果必须修改/etc/profile
,请非常小心,不要破坏系统管理员的自定义。通常您要做的profile
就是设置一个环境变量。
您声称“如果我这样做,我的应用程序将由 root 运行”。这是错误的:/etc/profile
由正在登录的用户执行。
重申一下,您可能应该做的是告诉用户“如果您想运行我的应用程序,请运行命令myapp
或从菜单中选择“我的应用程序”或单击”,仅此而已。请务必为 GUI 用户提供菜单条目。为了避免摆弄环境变量,请提供一个调用脚本来设置任何必要的环境变量。