 ac724e7bbc
			
		
	
	
		ac724e7bbc
		
	
	
	
	
		
			
			Resource management system for submitting and controlling jobs on supercomputers, clusters, and grids http://www.adaptivecomputing.com/products/open-source/torque
		
			
				
	
	
		
			97 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { config, pkgs, lib, ... }:
 | |
| 
 | |
| with lib;
 | |
| 
 | |
| let
 | |
|   cfg = config.services.torque.server;
 | |
|   torque = pkgs.torque;
 | |
| in
 | |
| {
 | |
|   options = {
 | |
| 
 | |
|     services.torque.server = {
 | |
| 
 | |
|       enable = mkEnableOption "torque server";
 | |
| 
 | |
|     };
 | |
| 
 | |
|   };
 | |
| 
 | |
|   config = mkIf cfg.enable {
 | |
|     environment.systemPackages = [ pkgs.torque ];
 | |
| 
 | |
|     systemd.services.torque-server-init = {
 | |
|       path = with pkgs; [ torque utillinux procps inetutils ];
 | |
| 
 | |
|       script = ''
 | |
|         tmpsetup=$(mktemp -t torque-XXXX)
 | |
|         cp -p ${torque}/bin/torque.setup $tmpsetup
 | |
|         sed -i $tmpsetup -e 's/pbs_server -t create/pbs_server -f -t create/'
 | |
| 
 | |
|         pbs_mkdirs -v aux
 | |
|         pbs_mkdirs -v server
 | |
|         hostname > /var/spool/torque/server_name
 | |
|         cp -prv ${torque}/var/spool/torque/* /var/spool/torque/
 | |
|         $tmpsetup root
 | |
| 
 | |
|         sleep 1
 | |
|         rm -f $tmpsetup
 | |
|         kill $(pgrep pbs_server) 2>/dev/null
 | |
|         kill $(pgrep trqauthd) 2>/dev/null
 | |
|       '';
 | |
| 
 | |
|       serviceConfig = {
 | |
|         Type = "oneshot";
 | |
|         RemainAfterExit = true;
 | |
|       };
 | |
| 
 | |
|       unitConfig = {
 | |
|         ConditionPathExists = "!/var/spool/torque";
 | |
|       };
 | |
|     };
 | |
| 
 | |
|     systemd.services.trqauthd = {
 | |
|       path = [ torque ];
 | |
| 
 | |
|       requires = [ "torque-server-init.service" ];
 | |
|       after = [ "torque-server-init.service" ];
 | |
| 
 | |
|       serviceConfig = {
 | |
|         Type = "forking";
 | |
|         ExecStart = "${torque}/bin/trqauthd";
 | |
|       };
 | |
|     };
 | |
| 
 | |
|     systemd.services.torque-server = {
 | |
|       path = [ torque ];
 | |
| 
 | |
|       wantedBy = [ "multi-user.target" ];
 | |
|       wants = [ "torque-scheduler.service" "trqauthd.service" ];
 | |
|       before = [ "trqauthd.service" ];
 | |
|       requires = [ "torque-server-init.service" ];
 | |
|       after = [ "torque-server-init.service" "network.target" ];
 | |
| 
 | |
|       serviceConfig = {
 | |
|         Type = "forking";
 | |
|         ExecStart = "${torque}/bin/pbs_server";
 | |
|         ExecStop = "${torque}/bin/qterm";
 | |
|         PIDFile = "/var/spool/torque/server_priv/server.lock";
 | |
|       };
 | |
|     };
 | |
| 
 | |
|     systemd.services.torque-scheduler = {
 | |
|       path = [ torque ];
 | |
| 
 | |
|       requires = [ "torque-server-init.service" ];
 | |
|       after = [ "torque-server-init.service" ];
 | |
| 
 | |
|       serviceConfig = {
 | |
|         Type = "forking";
 | |
|         ExecStart = "${torque}/bin/pbs_sched";
 | |
|         PIDFile = "/var/spool/torque/sched_priv/sched.lock";
 | |
|       };
 | |
|     };
 | |
| 
 | |
|   };
 | |
| }      
 |