永久自动启动

永久自动启动

我想制作一个随计算机启动的 Python 3.4 脚本,以便永久选中它随计算机启动(编辑:永久选中意味着无法通过 xfce4-session-settings 禁用它)。(编辑:这应该会影响所有用户,甚至是未来的用户,但如果您在我说这句话之前回答了,我不会将其考虑在是否接受它。)脚本不需要结束,特别是。我不希望非特权用户能够取消选中它。我该怎么做呢?

目前,他们无法删除或编辑(甚至无法查看详细信息)该条目(谢天谢地),因为它是为所有用户(甚至是未来的用户)制作的。不过,他们似乎可以取消选中它。

myScript.desktop(我通过添加文件为所有用户启用了它/etc/xdg/autostart并为其提供了以下文本:

[Desktop Entry]
Type=Application
Name=NameOfMyScript
Exec=MyScript
Icon=system-run
X-GNOME-Autostart-enabled=True

该脚本允许更新基于 DNS 的 Web 过滤器的 IP 地址。它会定期检查连接是否丢失,以防路由器重置且 IP 地址发生变化。

我在 Xubuntu 14.04,64 位。

答案1

已编辑...

我认为您正在寻找“初始化脚本”解决方案。这里有一个简单的示例: https://unix.stackexchange.com/questions/6697/run-python-script-on-startup 还有一个: http://mobiarch.wordpress.com/2014/05/16/creating-an-init-script-in-ubuntu-14-04/

简而言之:你将脚本放入例如/usr/local/bin/my_script.py(这不是必需的,你甚至可以从主目录运行它)

不要忘记:

sudo chmod +x /usr/local/bin/my_script.py

接下来,/etc/init.d创建一个文件,例如my_script包含以下内容:

#!/bin/sh
# /etc/init.d/my_script
# Description: Starts Python script my_script
# ————————————————–
#
### BEGIN INIT INFO
# Provides: my_script
# Required-Start: $network $local_fs $syslog
# Required-Stop: $local_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Start Python script my_script
### END INIT INFO

case $1 in
  start)
    echo -n "Starting my_script: "
    /usr/bin/python /usr/local/bin/my_script.py &
    ;;
  *)
    echo "Usage: my_script start"
    exit 1
esac

由于您希望此脚本在启动时启动,请运行以下命令:

sudo update-rc.d my_script defaults

我不确定我是否理解了您的意思:“我需要它在 Python 3.4 可用后启动脚本,因为它是一个 Python 脚本;”。请尝试这种方式,然后告诉我它是否启动。

再次编辑...无论如何,我正在考虑它...如果你的python脚本无法启动直到某些不确定的事件发生,也许你可以创建一个简单的bash脚本......类似于:

#!/bin/bash

STARTED=0
while [ $STARTED == 0 ]
do
    ./myscript.py && STARTED=1
    sleep 1
done

答案2

我使用的另一种解决方案是基于Upstart,这是一个非常强大的东西。也许你根本不需要它。 http://upstart.ubuntu.com/cookbook/

让我们在你的家中创建一个/home/your_user_name/scripts/my_script.conf包含以下内容的文件:

# my_script.conf

description "here goes the description for my_script"
author "Peter Farkas @ InDaLine"

# Stanzas
#
# Stanzas control when and how a process is started and stopped
# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn

# When to start the service
start on runlevel [2345]

# When to stop the service
stop on runlevel [016]

# Automatically restart process if crashed
respawn

# Essentially lets upstart know the process will detach itself to the background
expect fork


# Run before process
pre-start script
   setuid pep
   chdir /home/your_user_name/scripts
end script

# Start the process
exec /usr/bin/python /home/your_user_name/scripts/my_script.py & 

# Run after process start
post-start script
    echo "my_script.py started"
end script

我们需要使其可执行:

sudo chomd +x /home/your_user_name/scripts/my_script.conf

之后将此 .conf 文件链接到/etc/init目录:

sudo ln -s /home/your_user_name/scripts/my_script.conf /etc/init/my_script.conf

我记得在完成这些步骤后,我的脚本会在每次重启后启动,如果出现错误,脚本也会重新启动。我认为您可能不希望脚本永远运行,因此您不需要respawn此文件中的这部分,但也许这正是您所需要的,所以我就留在那里了。(我的脚本旨在永远运行,如果它以某种方式停止,则需要立即重新启动)。

我仍然不确定你的句子“我需要它在 Python 3.4 可用后启动脚本,因为它是一个 Python 脚本;”但 Upstart 被称为“基于事件的”,所以你可能需要它来微调启动条件......

答案3

好吧,我找到了一个疯狂的解决方法。所以,我想分享一下。不过,我并不指望它会成为公认的答案(但它确实有效)。它可能很危险,也可能不危险。

即从 /usr/bin 复制 xfc4-session-settings 到所有我真正希望能够使用它的用户的 bin 文件夹中(例如 /home/sally/bin)。然后,从 /usr/bin 中删除它。然后,更改主 bin 目录的权限,以便未经授权的用户无法访问它们。因此,所有未来的用户都无法看到自动启动的内容。缺点是他们看不到任何内容(尽管他们看不到脚本是件好事)。保留一份副本,以便在您确实需要它时将其放回原处。重新启动(如果 bin 文件夹尚未存在)。

在尝试删除它之前,我尝试仅更改它的权限,但它仍然可以为不应该有权访问它的用户打开。

相关内容