web-dev-qa-db-fra.com

Comment puis-je créer un script de démarrage qui démarre divers programmes requis par Rails?

Lorsque je démarre ma machine virtuelle Ubuntu 12.04 vmware, j'ouvre le terminal et exécute les commandes suivantes.

Sudo /etc/init.d/postgresql start 
Sudo /etc/init.d/Apache2 start
cd sites/name_of_Rails_app
bundle exec rake sunspot:solr:start
bundle exec rake sunspot:solr:start Rails_ENV=test
Rails s

Et le serveur Rails démarre alors dans cette fenêtre de terminal.

Existe-t-il un moyen d'automatiser tout ou la plupart de ce processus? Tout sauf le Rails s dans un terminal, peut-être?

J'ai regardé les applications de démarrage et ma commande postgresql (y compris 'Sudo') est là, mais je dois encore démarrer manuellement le serveur postgresql, donc je ne sais pas comment/si cet outil fonctionne.

Merci!

2
Chris Riley

Je ne suis pas doué pour de telles choses, mais voici quelques idées pour commencer à chercher.

La plupart de cela est probablement exagéré pour votre situation, alors concentrez-vous sur les suggestions # 2 et # 4. Ceci est particulièrement important si vous avez besoin que quelque chose soit exécuté au premier plan, car les deux autres suggestions n'ont pas de premier plan associé.

Puisque vous avez mentionné le mot magique, "serveur", les deux autres options peuvent également être envisagées.

1) Lorsque Linux démarre, il passe par un ou plusieurs niveaux d'exécution pour démarrer. (Quel niveau d'exécution fait ce qui varie un peu d'une distribution à l'autre.) Chaque niveau d'exécution possède un ensemble de scripts qui sont exécutés au démarrage du niveau d'exécution. Les scripts eux-mêmes vivent dans /etc/init.d. Chaque niveau d'exécution a un répertoire /etc/rcx.d où x est le niveau d'exécution 0 - 6. Je pense que 3 est pour un fonctionnement normal, mais vous devrez vérifier.

Dans chacun de ces répertoires, vous placez des liens symboliques vers vos scripts qui sont dans /etc/init.d et vous les nommez en commençant par un préfixe numérique à deux chiffres. Lorsque le niveau d'exécution démarre, tous les scripts de son répertoire sont exécutés dans l'ordre par les numéros de préfixe afin que les choses se déroulent de manière ordonnée et prévisible. Ajoutez un lien (avec un préfixe de numéro élevé pour qu'il soit exécuté après tout ce qui est déjà là) vers votre script dans rc3.d (ou quel que soit le bon niveau d'exécution pour votre système).

Si vous voulez avoir de la fantaisie, il y a un fichier appelé squelette dans /etc/init.d qui vous montre un peu toutes les cloches et les sifflets disponibles. Par exemple. Vous pouvez écrire votre script sous la forme d'une grande déclaration de cas avec un cas pour START, STOP, etc. et le lier symboliquement dans les niveaux d'exécution appropriés pour démarrer votre programme, puis l'arrêter lorsque le système s'arrête. Si vous faites cela, le lien symbolique que vous ajoutez aux niveaux d'exécution d'arrêt doit avoir un préfixe numérique bas pour qu'il soit fait avant que tout le reste dont il a besoin ait été arrêté.

Regardez les notes PATH dans le squelette. Les chemins d'accès disponibles lors des modifications de niveau d'exécution sont très restreints, vous n'avez donc pas accès à tout.

Si vous suivez cette voie, faites des sauvegardes et ayez un CD live, etc. prêt au cas où vous feriez quelque chose qui rompt la séquence de démarrage.

2) Lorsque bash démarre sur votre utilisateur (généralement, une fois par session), il exécute ~/.profile qui est lui-même un script bash qui peut exécuter tout ce que vous voulez pour votre utilisateur particulier.

Lorsqu'un shell bash individuel est démarré (peut se produire plusieurs fois par session), un autre script, ~/.bashrc est également exécuté. Vous pouvez exécuter votre script à partir de l'un ou l'autre de ces derniers selon les besoins. C'est beaucoup plus proche de ce que vous feriez normalement dans un terminal, donc c'est beaucoup plus facile et plus sûr à faire.

Étant donné que les choses exécutées de cette façon sont associées à votre utilisateur, elles prendront fin lorsque vous vous déconnecterez, sauf si vous faites des choses spéciales comme l'utilisation de Nohup dans vos scripts.

3) Vous pouvez stocker votre script quelque part dans le système, comme/usr/bin ou/usr/local/bin et configurer cron pour l'exécuter en ajoutant une entrée dans le système crontab ou le crontab de votre utilisateur.

Si votre système reste très actif, vous devez ajouter une vérification dans votre script afin qu'il ne fasse rien de plus si une autre instance de celui-ci est déjà en cours d'exécution ou s'est exécutée depuis le dernier démarrage.

Si vous utilisez un ordinateur portable ou un autre système qui s'éteint fréquemment, assurez-vous que l'anacron est installé et fonctionne. Peu de temps après le démarrage, il (sur simplifié) examine les activités cron pour voir si certaines ont été manquées alors que le système était éteint et les exécute. Habituellement, la planification des choses à exécuter peu après minuit simplifie les choses de sorte qu'il est moins probable que quelque chose soit exécuté deux fois dans la même journée.

4) Si vous utilisez un bureau gui comme kde ou gnome, ils ont des utilitaires de script de démarrage qui exécuteront les choses pour vous. kde les place dans $ HOME/.kde/Autostart. Vous pouvez y mettre votre script.

Les mêmes considérations s'appliquent qui ont été notées dans la suggestion # 2.

0
Joe

Créez votre propre fichier de script Shell et collez votre code de démarrage (que vous écrivez toujours sur le terminal) dans le code source de votre fichier de script Shell:

#!/bin/sh
Sudo /etc/init.d/postgresql start 
Sudo /etc/init.d/Apache2 start
cd sites/name_of_Rails_app
bundle exec rake sunspot:solr:start
bundle exec rake sunspot:solr:start Rails_ENV=test
Rails s

Et puis placez ce script Shell quelque part et ajoutez son chemin de fichier à votre $PATH. Et puis ouvrez votre Terminal et écrivez le nom de fichier de votre script Shell et appuyez sur ENTER.

0
Ziyaddin Sadigov