如题,Ubuntu用户目录下的.profile文件适合加入启动客户端程序的脚本吗?
我有个项目是做在Ubuntu上运行的客户端程序,它需要在系统启动后自启,而使用自启服务的方式(update-rc.d)不能够自启我的这个客户端(因为它依赖gtk什么的,服务启动会报错),因此我打算采用在.profile文件中加入启动我的客户端脚本的方式来做,这样用户登录后可以自启,但不知道这样做是否合理,是否对用户系统有什么其他影响,请linux大神答疑解惑一下,或者有没有什么更好的方式自启我的客户端程序

解决方案 »

  1.   

    profile 不适合加上开机启动脚本,
    目前两种方式做开机启动脚本:sysv和systemd。
    sysv 就是写 rc.d 的脚本。具体百度
      

  2.   

    profile是环境设置,估计你那个应用启动需要环境的。环境复制过来,加上启动,做个脚本,加到系统启动里面/etc/ inittap  etc/  inin.d/下启动脚本等.以前做过ssh登入进来自动执行脚本,就是在用户目录下配置文件
      

  3.   

    ubuntu 和 centos 7等已经默认采用systemd启动了
    先把.service文件,注意不是.profile文件拷贝到systemd下的启动等级对应的目录 注意区分启动等级,你的是登录后
    然后使用 systemctl enable xxxxx.service
    这样系统会自动加入对应等级的自动启动列表
    然后 systemctl start xxxxx.service就可以启动服务
    老的initd默认已经不使用了,除非你手动开启
      

  4.   

    我上面说的update-rc.d方式应该属于你说的sysv方式吧,先写个含start、stop、status等方法的脚本,然后把脚本软链接到/etc/init.d/下,最后通过update-rc.d命令把脚本添加到指定运行级别下的rc.d目录下。目前是使用这种方式遇到了问题,依赖gtk时启动不起来,不依赖时可以;而使用profile是没有这种问题的
      

  5.   

    这种情况说明脚本写的有问题,检查依赖的 gtk 的 lib 目录,在脚本里面设置LD_LIBRARY_PATH变量,或者将 gtk 的 lib 目录加入到 /etc/ld.so.conf文件后,执行 ldconfig。
    可以看看对应的 profile 是不是设置了这个LD_LIBRARY_PATH变量了。
      

  6.   

    这种情况说明脚本写的有问题,检查依赖的 gtk 的 lib 目录,在脚本里面设置LD_LIBRARY_PATH变量,或者将 gtk 的 lib 目录加入到 /etc/ld.so.conf文件后,执行 ldconfig。
    可以看看对应的 profile 是不是设置了这个LD_LIBRARY_PATH变量了。gtk 的 lib 目录肯定在系统库搜索路径下的,我怀疑因为gtk依赖图形界面导致自启服务起不来,我用secureCRT工具连接后执行程序报的错和服务自启时报的错一样,而在图形界面的终端中执行程序不会报错
      

  7.   

    图形界面的软件不适合开机启动,如果是要图形界面启动后自动启动,可以配置 xdg autostart。
    假如非要开机启动且不启动Xorg图形界面,可以使用 Xvnc,指定 DISPLAY 到这个Xvnc 上后启动程序。
      

  8.   

    请问启动等级为登录后对应的目录是哪一个,我的systemed下没有启动等级目录额(/usr/lib/systemd/目录下只有ntp-unit.d, /etc/systemd/目录下只有system)
      

  9.   


     以我的服务器程序为例子
    在你的service文件里  
    [Unit]
    Description=XFile service daemon
    Documentation=http://www.phoenixp2p.com
    After=network.target 
    After 指定在什么时间启动合适 我的服务是在网络准备好之后
    然后
    [Install]
    WantedBy=multi-user.target
    在WantedBy里指定是多用户模式下[你的应该指定是用户登录login后]在ubuntu 和 centos 里 都是将.service文件拷贝到 /etc/systemd/system/ 下
    其他发行版本应该类似,查下说明吧
    然后root 执行
    chmod +x /etc/systemd/system/Xftpsvr.servicesystemctl enable Xftpsvr.service 使自动启动配置生效
      

  10.   


     以我的服务器程序为例子
    在你的service文件里  
    [Unit]
    Description=XFile service daemon
    Documentation=http://www.phoenixp2p.com
    After=network.target 
    After 指定在什么时间启动合适 我的服务是在网络准备好之后
    然后
    [Install]
    WantedBy=multi-user.target
    在WantedBy里指定是多用户模式下[你的应该指定是用户登录login后]在ubuntu 和 centos 里 都是将.service文件拷贝到 /etc/systemd/system/ 下
    其他发行版本应该类似,查下说明吧
    然后root 执行
    chmod +x /etc/systemd/system/Xftpsvr.servicesystemctl enable Xftpsvr.service 使自动启动配置生效
    设置用户登录后启动是不是设置WantedBy=graphical.target,貌似没有登录后的target额,另外可以控制服务在用户退出登录时停止运行吗,可以的话应该怎么设置